Ngnx工作原理 1

2022-05-13 02:17:27 字數 1922 閱讀 5334

nginx 是乙個輕量級的http 服務程式,相比其他伺服器程式如apache,nginx占用記憶體少,穩定性高,併發處理能力強。同時nginx 還是乙個反向**服務程式,和郵件**服務程式。nginx具有豐富的模組庫、靈活的配置、較低資源消耗等優點。下面,我們一起深入看一下nginx的工作機制

1. nginx 如何實現高效能低消耗的呢?

我們從以下幾個方面說明以下:

網路事件處理機制

資源分配技術

多核處理優化

2.nginx的程序模型

在nginx的技術架構中,程序模型是至關重要的一部分。接下來,我們一起看看nginx程序模型,以及它們的工作機制。

linux 系統中,nginx預設以守護程序daemon方式啟動,預設採用多程序方式。nginx包括兩種型別的程序:

下面,我們分別深入看一下master和worker程序。

2.1 master 程序工作機制

在nginx啟動時,master程序建立,主要負責初始化nginx和相關模組、fork worker程序、接收處理外界訊號等工作。

nginx的初始化過程:

分析流程:

注意:nginx 0.8 版本以後,提供了 -s引數,用於管理nginx服務的停止和重啟,注意line 11:

2.2 worker 程序工作機制

worker程序負責所有請求的處理工作,我們通過乙個http請求,來梳理一下worker的工作流程:

需要注意:乙個http請求,完全由worker程序處理,而且只在乙個worker中處理

2.3 master-worker 程序架構機制的優勢有哪些??

對於每個worker 程序來說,獨立的程序,不需要加鎖,節約鎖導致的資源開銷;worker程序之間,互不干擾,平滑重啟就是很好的例子,服務不中斷。

2.4 網路事件處理機制

nginx 採用的是非同步非阻塞事件處理機制,支援select/poll/epoll/kqueue 等等。nginx 同時會監控多個事件,呼叫他們是阻塞的。但是呼叫有超時時間,在超時時間內,如果有事件準備好了,就返回,否則重新放入epoll中。當讀寫返回eagain時,事件將會被再次放入epoll中。

處理執行緒只有乙個,同時處理的請求也只有乙個,所謂多請求併發,只是在不斷的切換請求而已。雖然是切換,但這種切換不涉及上下文切換,相比十分輕量。更多的併發,只是會占用更多的記憶體。

程序相關的還有,訊號和定時器,這部分另外單獨講解。

3. nginx 包含哪些模組

nginx是模組化架構的服務,豐富的模組,鬆散耦合,也讓nginx更加強大!我看看nginx 都有哪些模組

驚群效應:

多路復用-select、epoll

select

i/o多路復用採用的是select 模型,即系統發出select系統呼叫,等待核心主動將可

用的檔案描述符資訊傳送給應用一端,fd未準備好,應用會block住socket請

求,當fd就許後,select 會遍歷維護的檔案描述符發現可用的檔案描述符。

epoll

每當fd就緒,系統採用**函式將fd放入就緒列表,效率非常高。
舉例:

告訴服務員,用餐結束,服務員告知老闆,說有幾桌要結賬,老闆需要詢問

告訴服務員,用餐結束,服務員告知老闆,說哪號桌要結賬,老闆不需要詢問。

select epoll 優缺點總結

模型優點

缺點select

1.採用線性遍歷的方式獲取可用的fd檔案描述符

2.可維護檔案描述符大小有限制為1024

epoll

1.每當fd就緒,系統採用**函式將fd放入就緒列表,效率非常高。

2.最大連線數沒有限制

Cache工作原理 1

原帖 http blog.csdn.net chinacodec archive 2008 11 29 3408560.aspx 2.4.1 cache 工作原理 圖 2 27給出乙個位於 cpu與主存之間的 cache 最基本的結構。cache 容量與主存容量相比是很小的,差 二 三個數量級,目前...

Struts1工作原理

1 讀取配置 初始化moduleconfig物件 struts框架總控制器 actionservlet 是乙個servlet,在web.xml中配置成自動啟動的servlet。讀取配置檔案 struts config.xml 的配置資訊。為不同的struts模組初始化相應的moduleconfig物...

1 C Mooc C 工作原理

原始檔經過編譯器,可以產生lib dll exe 運算子 就是函式而已,如下 std cout dump duck 函式的宣告與定義 如果宣告,沒定義,那麼就可以過編譯,但是過不了linker 所以,linker的工作就是resolve symbols,聯通各個函式,用宣告去找函式的定義,再把他們兩...