Nginx-->基礎-->理論-->nginx進程模型

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的信號進行相關的操做。

worker進行接收到的信號對框架的意義
信號 對應進程中全局標誌位變量 意義
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的很是好的高併發性能。

相關文章
相關標籤/搜索