Nginx為什么可以支持高並發


Nginx為什么可以支持高並發

nginx 采用的是多進程+epoll,能實現高並發,其可以支持的並發上限大概是同時支持5W個連接

多進程

 nginx 在啟動后,會有一個 master 進程和多個相互獨立的 worker 進程,master進程接收來自外界的連接,並向各worker進程發送信號,每個進程都有可能來處理這個連接,master進程能監控worker進程的運行狀態,當 worker 進程退出后(異常情況下),會自動啟動新的worker進程

 

驚群現象

master進程首先通過 socket() 來創建一個socket文件描述符用來監聽,然后fork生成子進程(workers 進程),那么當連接進來時,所有子進程都將收到master進程的        通知並“爭着”與它建立連接,這就叫“驚群現象”。大量的進程被激活又掛起,只有一個進程可以accept() 到這個連接,這當然會消耗系統資源

nginx對驚群現象的處理accept_mutex(加鎖)

nginx 提供了一個 accept_mutex 這個東西,即每個 worker 進程在執行accept之前都需要先獲取鎖,獲取不到就放棄執行accept()。有了這把鎖之后,同一時刻,就只會      有一個進程去accpet(),這樣就不會有驚群問題了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM