1、nginx的進程模型基礎nginx
如上圖,是nginx的基本進程模型。編程
1.nginx的master進程與worker進程關係網絡
nginx的master進程負責worker進程的管理,包括建立worker進程、發送信號給worker、監控worker進程的運行狀態等。master進程是worker進程的管理者。在實際的nginx運行中:併發
master進程是以root身份運行的,而worker進程是以咱們建立的nginx對應用戶或者nginx.conf中的user nobody;這個配置中指定的用戶如nobody用戶運行的。框架
2.master進程概述異步
①:master進程個數,master進程的主要任務是管理worker進程,這就意味着,nginx在啓動時只建立一個master進程,也只有一個master進程。master進程是能夠取消的,這麼作能夠實現讓nginx以單進程的方式運行,實際生產環境中不會這麼操做。高併發
②:用戶的操做相關信號,不是直接對worker通訊,而是經過將信號傳遞給master進程, master進程再與worker進程交互。性能
3.worker進程概述優化
①:worker進程個數,通常與物理機的CPU核數一致,這裏的緣由與nginx的進程模型以及nginx的事件處理模型相關。ui
②:worker進程之間的關係,進程之間是平等且相互獨立的,一個具體的請求只能被一個worker進程處理,其餘worker進程不會參與進來。
③:worker進程之間不會相互影響,一個worker進程掛掉不會影響別的worker進程,如CPU核數是4,worker進程正常是4個,當一個worker進程掛掉後(看進程是如何掛掉的,具體看進程收到什麼類型的信號去掛掉進程,不是全部worker進程掛掉後都會從新啓動),master進程可以監控到並主動啓動一個新的worker進程。
4.master進程與worker進程工做過程簡述
①master進程
master進程是不須要處理網絡事件的,如從用戶過來的請求是不須要master進程去親自處理的,即爲不負責具體的業務的執行,負責的事經過管理worker等子進程來實現重啓服務、平滑升級、更換日誌文件、配置文件實時生效等功能。
②worker進程
worker進程負責處理具體的網絡事件,接收並處理用戶的鏈接,接收鏈接後楷書讀取請求、解析請求、處理請求,產生數據後在將數據返回給客戶端,最後再講鏈接斷開,其中,worker進程是根據來自master的信號進行相關的操做。
信號 | 對應進程中全局標誌位變量 | 意義 |
QUIT | ngx_quit | 優雅關閉worker進程 |
TERM或INT | ngx_terminate | 強制關閉進程 |
USR1 | ngx_reopen | 從新打開全部文件 |
WINCH | ngx_debug_quit | 目前沒有實際的意義 |
HUP | 平滑讀取配置文件 |
|
USR2 | 平滑升級 |
5.nginx進程模型優點
①worker進程之間相互獨立,彼此之間互不影響,不須要加鎖,節省了鎖所須要的開銷,而且編程和問題定位複雜度低。
②進程之間互不影響,避免了進程之間的相互影響,下降風險。
6.nginx的高併發
①異步與同步
同步:同步意味着執行須要一步步進行,在上一步操做完成以前沒法進行下一步操做
異步:執行不用嚴格按照順序一步步執行,下一步的操做沒必要等待上一步操做的完成
②阻塞與非阻塞
阻塞:進程在執行過程當中,遇到如I/O操做,須要消耗比較長的時間,操做系統會將進程阻塞,將CPU控制權讓給其餘工做進程,這種調度方式爲阻塞
非阻塞:進程在執行過程當中,無論是否遇到如I/O須要消耗比較長時間的操做,都不會以阻塞的方式等待I/O操做完成或者數據返回,而只是將I/O請求發送給操做系統,繼續執行下一跳語句。當操做系統完成I/O操做後,會通知執行I/O操做的進程,進程會在特定的時候處理這個事件。
nginx之因此能夠實現高併發,得益於nginx採用異步非阻塞的方式。
異步非阻塞,使用epoll和大量的細節處優化,造就了nginx的很是好的高併發性能。