Nginx原始碼分析 事件迴圈

2021-05-23 15:42:36 字數 725 閱讀 6106

經過前面相關博文的介紹,我們了解到master程序建立好乙個worker程序後,worker程序還會進行乙個初始化工作,然後才會陷入「死」迴圈中。這個「死迴圈」也就是本文將談及的事件迴圈,也就是上圖中的黃色部分。整個黃色部份是由乙個迴圈構成的,實際上,這個迴圈裡將會做很多的事情,但本文將只關注圖中紅色標註的事件部分——ngx_process_events_and_timers。ngx_process_events_and_timers是乙個函式(定義在src/event/ngx_event.c中)。接下來,就從這個函式開始進入事件驅動的核心。

ngx_process_events_and_timers一做完工作,就又回到了事件迴圈中去了,上圖示;但會很快又會回到事件處理中來。

上文中,分析了事件迴圈中有關事件處理的過程;在分析的過程中,我們有提到對accept事件的處理,accept事件就是監聽套介面上有新的連線到來的事件;接下來,我們分析一下accept事件的handler方法,看看accept事件的處理過程是如何的。accept事件的handler方法是ngx_event_accept(位於src/event/ngx_event_accept.c中),**分析如下:

accept事件的handler方法也就是如此了。剩下的就是每個連線上的讀寫事件的handler方法沒有分析了,這一部分的內容將直接帶領我們進入http模組中,所以等我們把epoll看完了,再開始http模組的分析吧。

備註:今天太陽真好,趁太陽還沒有下山,就此收尾,然後出去享受週末的陽光。

nginx 原始碼分析

近期準備研究一下nginx原始碼,此處記錄一下。計畫 1 了解evan miller 的文章 2 了解nginx的組織架構 3 了解nginx的基本資料結構 4 熟悉nginx的主要module及執行機制,主要是core http event os 5 簡單的module開發及測試 一 準備 為了方...

nginx原始碼分析 從原始碼看nginx框架總結

nginx原始碼總結 1 中沒有特別繞特別彆扭的編碼實現,從變數的定義呼叫函式的實現封裝,都非常恰當,比如從函式命名或者變數命名就可以看出來定義的大體意義,函式的基本功能,再好的架構實現在編碼習慣差的人實現也會黯然失色,如果透徹理解 的實現,領悟架構的設計初衷,覺得每塊 就想經過耐心雕琢一樣,不僅僅...

Nginx原始碼分析 過期事件和驚群事件的處理

nginx原始碼分析 過期事件和驚群事件的處理 過期事件 每個事件的date域都是乙個結構體ngx connection t結構體,表示對應的連線。對於乙個結構體struct epoll event 中的data.ptr成員儲存的是ngx connection t連線,這裡使用instance標誌位...