您好,登錄后才能下訂單哦!
nginx如何實現(xiàn)高并發(fā)
簡單來講,就是異步,非阻塞,使用了epoll和大量的底層代碼優(yōu)化。
稍微詳細一點展開的話,就是nginx的特殊進程模型和事件模型的設(shè)計。
進程模型
nginx采用一個master進程,多個woker進程的模式。
master進程主要負責收集、分發(fā)請求。當一個請求過來時,master拉起一個worker進程負責處理這個請求。
master進程也要負責監(jiān)控woker的狀態(tài),保證高可靠性
woker進程一般設(shè)置為跟cpu核心數(shù)一致。nginx的woker進程跟apache不一樣。apche的進程在同一時間只能處理一個請求,所以它會開很多個進程,幾百甚至幾千個。而nginx的woker進程在同一時間可以處理額請求數(shù)只受內(nèi)存限制,因此可以處理多個請求。
事件模型
nginx是異步非阻塞的。
每進來一個request,會有一個worker進程去處理。但不是全程的處理,處理到什么程度呢?處理到可能發(fā)生阻塞的地方,比如向上游(后端)服務(wù)器轉(zhuǎn)發(fā)request,并等待請求返回。那么,這個處理的worker不會這么傻等著,他會在發(fā)送完請求后,注冊一個事件:“如果upstream返回了,告訴我一聲,我再接著干”。于是他就休息去了。此時,如果再有request 進來,他就可以很快再按這種方式處理。而一旦上游服務(wù)器返回了,就會觸發(fā)這個事件,worker才會來接手,這個request才會接著往下走。
web server的工作性質(zhì)決定了每個request的大部份生命都是在網(wǎng)絡(luò)傳輸中,實際上花費在server機器上的時間片不多。這是幾個進程就解決高并發(fā)的秘密所在。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。