从一连接一进程到 epoll:I/O 多路复用如何应对 C10K
C10K 讨论的是一台服务器如何同时维持一万条网络连接。这里的“一万”指并发连接数,不等同于每秒完成一万次请求。放到今天,这个数量并不夸张;但在“一条连接对应一个进程”的服务模型里,连接数增加意味着进程数也随之增加,服务器很快就会把大量资源花在连接之间的调度上。
I/O 多路复用改变的正是这一点:程序不再为每条连接准备一个独立进程,而是让少量线程同时观察大量文件描述符,只处理已经具备读写条件的连接。select、poll 和 epoll 都在解决这个问题,只是随着连接数上升,它们查找就绪事件的成本差别很大。