常见WEB服务器并发策略

一. 一个进程处理一个连接 非阻塞I/O
fork模式,主进程负责accept()客户端的连接,fork一个新的worker进程,出来后进程销毁掉。
prefork模式,主进程预先创建一定数量的子进程,每个请求由一个子进程处理,但是一个子进程可以处理多个请求。父进程只负责管理子进程,根据站点负载来调整子进程的数量,相当维护一个动态子进程。(apache2使用该模式)

二. 一个线程处理一个连接 非阻塞I/O
一个进程中通过多个线程来处理多个连接,一个线程出来一个连接。Apache的work多路处理模块使用该方式,主要目的是解决prefork模式中太多进程的开销,使得支持更多的并发连接。
缺点:产生的线程实际上都是内核进程调度器管理的轻量级进程,上下文开销依然存在。

三. 一个进程处理多个连接 非阻塞I/O
一个进程处理多个连接,就是多路IO就绪通知的应用。Nginx lighttpd 都是使用该模式。

四. 一个线程处理多个连接 异步I/O
采用应用异步IO模式,彻底在应用层面不考虑IO。
使用linux的AIO实现,目前应用少。






猜你喜欢

转载自doyoueat.iteye.com/blog/1305471