在Nginx中,由Master进程管理多个Worker进程,而每一个连接是由一个Worker进程处理的。Nginx没有像PHP-FPM那样才用Master进程分发请求,而是由操作系统内核机制完成(内置负载均衡算法),再通过Mutex来避免“惊群”现象。
Worker进程的数量一般会和机器CPU核数一致。每个进程通过Reactor的事件处理机制,实现了循环处理多个准备好的事件。这样处理的优点在于无需创建线程,没有上下文切换,最大化利用CPU。这样处理方式的缺点在于,Reactor是同步的处理方式,因此服务器在处理长时间IO操作时会阻塞其他链接。
Nginx在1.7.11中引入了AIO线程池技术,如此大文件可以用AIO线程池,小文件可以直接sendfile。
Kitura利用了Apple的GCD来管理线程池,实现高并发。