高并发网络服务的基石是 IO 多路复用:让一个线程等待一批文件描述符中的任意就绪事件。

select 与 poll

每次调用都要把整个描述符集合从用户态拷到内核态,返回后还要线性扫描找出就绪者。连接数一上万,开销就成为瓶颈。

epoll

在内核维护注册表,就绪事件通过回调挂入就绪链表,返回的只处理就绪的描述符。复杂度从 O(n) 降到 O(就绪数)。

编程模型

配合非阻塞 IO,单线程事件循环就能支撑海量连接,这是主流高性能网络框架的底座。