在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)處理多個準(zhǔn)備好的事件品嚣。這樣處理的優(yōu)點在于無需創(chuàng)建線程,沒有上下文切換囚霸,最大化利用CPU腰根。這樣處理方式的缺點在于激才,Reactor是同步的處理方式拓型,因此服務(wù)器在處理長時間IO操作時會阻塞其他鏈接。
Nginx在1.7.11中引入了AIO線程池技術(shù)瘸恼,如此大文件可以用AIO線程池劣挫,小文件可以直接sendfile。
Kitura利用了Apple的GCD來管理線程池东帅,實現(xiàn)高并發(fā)压固。