每個nginx伺服器的worker process都有能力同時接受多個新到達的網路連線?

時間 2021-06-17 14:18:37

1樓:CodeTank

@Mars Wong 的答完全是錯誤的。

首先 master_process 會接收所有的請求

nginx master不會接受任何請求,所有的連線都在worker中處理。

nginx所有worker並不能同時accept多個新連線,nginx實現了乙個叫accept鎖的東西,同一時刻只有乙個worker能夠獲取到這個accept鎖,只有獲取到鎖的這個worker才能夠accept新連線。

實現原始碼如下圖所示:

第223行就是獲取accept鎖的函式呼叫,第242行處理事件(包含新連線到來的處理)。

accept鎖是為了解決「驚群」問題實現的,如果沒有accept鎖,那麼新連線到來的時候,核心會喚醒所有的worker程序,然後worker程序就會爭相去搶新連線,最終只有乙個worker能夠搶到。那麼其他worker就相當於白費功夫浪費系統資源,核心喚醒它們其實是不必要的。

然後根據乙個 RR 演算法比較均勻地分配給各個

nginx worker的負載均衡是通過乙個叫ngx_accept_disabled的變數實現的,它會保證每個worker的連線數不會超過某乙個閾值。具體實現方式就不在這裡祥述了,題主有興趣去讀一下原始碼吧。

每個 worker_process 內會開啟多個執行緒處理請求

這句話不準確,nginx在1.7.11版增加了執行緒池,之前的版本一直都是單執行緒的。

1.7.11之後的執行緒池主要用於處理一些阻塞IO操作,要使用aio指令啟用。

一般情況下,請求還是交由worker主線程處理。

微伺服器與刀片伺服器的區別有哪些?

陳丹 微伺服器主要是面向簡單的應答,比如搜尋引擎頁面之類的。降低功耗為主要目的。刀片伺服器體現的是計算密度,在HPC應用越來越多。 LSI China 微伺服器和刀片伺服器雖然都具有高密度的特徵,但是它們應用的工作負載場景是不同,也就是計算能力區別。微伺服器的出現更多是基於功耗方面的考量,而刀片伺服...

伺服器租借

掛機寶 你這個我最有經驗了!你前期不用這麼好的,先用入門版的,使用者量大了在提高併發,在公升級伺服器也不遲。現在雲伺服器都是可以彈性公升級的。省下來的錢買排骨不香麼。一句話該公升級配置的時候我們就公升級,不該公升級我一毛都不出!你說呢 天上雲CDN 關鍵是看自己需求,在根據需求選擇配置。以免浪費不必...

香港伺服器和美國伺服器有哪些區別?

蘇州晨智教育科技有限公司 很多使用者在選擇雲伺服器的時候,會疑惑美國雲伺服器和香港雲伺服器應該這麼選擇,到底選擇美國的好還是香港的好。1 從配置上 配置上雲伺服器引數都是一樣的,包括 CPU 記憶體 硬碟 頻寬,從硬體上看雲伺服器配置是差不多的,使用者只需要按照自己需求選擇對應配置。2 從地區上 美...