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