Nginx是如何處理HTTP請(qǐng)求的

Nginx是如何處理HTTP請(qǐng)求的

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 )出來和客戶端建立連接進(jìn)行交互,直到連接斷開,該子進(jìn)程就結(jié)束了。

使用進(jìn)程的好處是各個(gè)進(jìn)程之間相互獨(dú)立,不需要加鎖,減少了使用鎖對(duì)性能造成的影響,同時(shí)降低了編程的復(fù)雜度和開發(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)生一定的開銷。當(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)求?(即為?非阻塞?);而?客戶端?在此期間也?無需等待響應(yīng)?,可以去處理其他事情(即為?異步?)。

當(dāng) IO 返回時(shí),就會(huì)通知此?工作進(jìn)程?;該進(jìn)程得到通知,暫時(shí)?掛起?當(dāng)前處理的事務(wù)去?響應(yīng)客戶端請(qǐng)求?。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享