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