Nginx 是一個高性能的 Web 服務(wù)器,能夠同時處理大量的并發(fā)請求。它結(jié)合多進(jìn)程機(jī)制和異步機(jī)制 ,異步機(jī)制使用的是異步非阻塞方式 。
(推薦教程:nginx教程)
下面為大家介紹一下 Nginx 的多線程機(jī)制和異步非阻塞機(jī)制 。
1、多進(jìn)程機(jī)制
服務(wù)器每當(dāng)收到一個客戶端時,就有 服務(wù)器主進(jìn)程 ( master process )生成一個 子進(jìn)程( worker process )出來和客戶端建立連接進(jìn)行交互,直到連接斷開,該子進(jìn)程就結(jié)束了。
使用進(jìn)程的好處是各個進(jìn)程之間相互獨立,不需要加鎖,減少了使用鎖對性能造成的影響,同時降低了編程的復(fù)雜度和開發(fā)成本。
其次,采用獨立的進(jìn)程,可以讓進(jìn)程互相之間不會影響 ,如果一個進(jìn)程發(fā)生異常退出時,其它進(jìn)程正常工作, master 進(jìn)程則很快啟動新的 worker 進(jìn)程,確保服務(wù)不會中斷,從而將風(fēng)險降到最低。
缺點:
操作系統(tǒng)生成一個子進(jìn)程需要進(jìn)行 內(nèi)存復(fù)制等操作,在資源和時間上會產(chǎn)生一定的開銷。當(dāng)有大量請求時,會導(dǎo)致系統(tǒng)性能下降 。
2、異步非阻塞機(jī)制
每個工作進(jìn)程 使用 異步非阻塞方式 ,可以處理多個客戶端請求 。
當(dāng)某個 工作進(jìn)程 接收到客戶端的請求以后,調(diào)用 IO 進(jìn)行處理,如果不能立即得到結(jié)果,就去 處理其他請求 (即為 非阻塞 );而 客戶端 在此期間也 無需等待響應(yīng) ,可以去處理其他事情(即為 異步 )。
當(dāng) IO 返回時,就會通知此 工作進(jìn)程 ;該進(jìn)程得到通知,暫時 掛起 當(dāng)前處理的事務(wù)去 響應(yīng)客戶端請求 。