在Nginx中,由Master進程管理多個Worker進程,而每一個連接是由一個Worker進程處理的。Nginx沒有像PHP-FPM那樣才用Master進程分發(fā)請求,而是由操作系統(tǒng)內(nèi)核機制完成(內(nèi)置負載均衡算法),再通過Mutex來避免“驚群”現(xiàn)象。
Worker進程的數(shù)量一般會和機器CPU核數(shù)一致。每個進程通過Reactor的事件處理機制,實現(xiàn)了循環(huán)處理多個準備好的事件。這樣處理的優(yōu)點在于無需創(chuàng)建線程,沒有上下文切換,最大化利用CPU。這樣處理方式的缺點在于,Reactor是同步的處理方式,因此服務器在處理長時間IO操作時會阻塞其他鏈接。
Nginx在1.7.11中引入了AIO線程池技術(shù),如此大文件可以用AIO線程池,小文件可以直接sendfile。
Kitura利用了Apple的GCD來管理線程池,實現(xiàn)高并發(fā)。