Answers
epoll 是 linux 2.6 以后才出现的,所以,Nginx 使用了 epoll 模型。所以,Nginx 处理静态文件或者做反代很强行,因为主要是 IO 操作。
epoll 是 select/poll 的增强版,就是基于事件通知的。
Apache、Tomcat,他们虽然也是 Web 服务器,但是也承担应用服务器的角色,之所以称他们为应用服务器,是因为他们真的要跑具体的业务应用,如科学计算、图形图像、数据库读写等。它们很可能是 CPU 密集型的服务,事件驱动并不合适。
鱼与熊掌不可兼得。事件驱动适合于 IO 密集型服务,多进程或线程适合于 CPU 密集型服务。
再者,根据 TCP、HTTP 协议的特点,大部分服务器都会保留 time_wait 的持久链接。Web 服务器主要是用来处理 HTTP 协议的请求。
没有最完美的,只有更适合的