一 . 概述
nginx的高效能是大家所了解的,nginx之所以擁有這麼好的效能和它的程序模型是分不開的.
當nginx啟動的時候,它會以後臺程序的方式進行,然後nginx會啟動乙個master程序和多個worker程序.也就是說,nginx是採用多程序的方式程序的.
現在我們需要了解一下master程序和worker程序的工作方式.
master程序:master程序的主要的功能就是完成對worker程序的管理,包括獲取外界的響應,監控worker程序的執行狀態,也就是說,我們發現nginx中的master程序是不負責網路請求的處理的.
現在我們就說一下worker程序的主要作用了,那就是負責網路請求的處理了.
那麼,我們的nginx之中到底是有多少個worker程序的呢?在標準的配置檔案之中,我們一般將worker程序的數量配置為與我們的cpu的核心數是一致的.
現在,我們來看看我們上面描述的nginx的基本結構:
我們可以看到基本的結構了,在上面的圖之中我們看到了乙個有趣的地方,那就是管理員的概念.
管理員通過操作master來控制nginx的執行,使用的方式就是傳送訊號量. 比如啟動nginx,重啟nginx伺服器等,
在nginx之後的版本之中,出現了很多的指令碼命令,如 ,/nginx 就是啟動nginx ,如 ./nginx -s reload 就是重啟nginx ,ru ./nginx -s stop 就是關閉nginx的伺服器.
二 . nginx的執行模式
我們在上面說到了,master程序的主要工作就是完成worker程序的控制管理的,其實每乙個worker程序都是從master程序fork出來的,也就是乙個子程序的概念.
這麼說來,我們的master程序就能完全的控制worker程序的執行.
當乙個請求過來的時候,每乙個worker程序都在master程序的worker程序表之中說明自己的狀態,如果狀態正常,那麼該worker程序就會完成請求的競爭.
解決競爭的方式也很常見,就是按照乙個互斥鎖的功能實現的.這就保證了乙個請求只能有乙個worker程序進行處理.
現在我們知道了,nginx之中所有的worker之間是相互獨立的,也就是說乙個worker程序出現問題,其它的worker程序是沒有影響的.
三 .非同步非阻塞模式
我們在上面的介紹之中看到,在nginx之中是由worker程序程序請求的處理的,那麼我們的worker程序那麼的少,怎麼實現高併發的處理的呢?
nginx使用的就是非同步非阻塞的模式完成高效能的實現的,
在nginx之中,使用了epoll模型完成的這種非同步非阻塞的方式,這是一種基於事件模型完成的非同步非阻塞的模式.
當我們的事件沒有處理好,那麼我們的請求就會進入epoll的池之中,等到事件處理好之後就會**該請求,
採用非同步非阻塞的方式,nginx就實現了高併發的效能.
Nginx程序模型
這篇主要是閱讀這篇博文的筆記。nginx採用的也是大部分http伺服器的做法,master,worker模型,基本的事件處理都是放在worker中,master負責一些全域性初始化,以及對worker的管理。nginx中的master和worker之間是通過socketpair來實現的,每次fork...
Nginx程序模型
目錄 1.nginx管理 工作程序模式 2.驚群 問題 為了支援現在流行的多cpu和多核架構,nginx使用了管理程序和工作程序的設計。架構設計如下圖所示 管理程序為工作程序的父程序,負責外部指令的接收,工作程序的狀態監管,負載均衡等 工作程序負責客戶端請求的處理和響應,工作程序一般是按照cpu的核...
Nginx筆記 程序模型
nginx是乙個效能非常強的高併發處理伺服器,他可以支援百萬級併發的需求 當nginx啟動時候,master在80埠監聽,他的作用僅僅是監聽,與客戶端連線的是worker,例如現在在nginx.conf裡配置worker processes 3,那麼master就會fork三個worker程序用於處...