Nginx原始碼分析 worker程序的建立

2021-06-27 03:08:19 字數 982 閱讀 3399

nginx原始碼分析—worker程序的建立

假設現在ngx_init_cycle已經結束(畢竟這個函式確實龐大),也就是說關於nginx的初始化都已經結束。那麼看看如何建立程序模型ngx_master_process_cycle。

在這個函式中,首先情況一些訊號,然後將需要關注的訊號註冊進去(這個時候關於訊號的處理函式已經被註冊),可以看出來master程序關注的訊號有10個。比如sigchld等。接下來呼叫ngx_start_worker_processes函式,這個函式就是開啟worker程序的函式,剩下的master程序就進入乙個死迴圈,這個死迴圈就是等待這個外部訊號的啟用,如果有乙個訊號,那麼就更新一次時間,master程序大部分時間都阻塞在sigsuspend函式上。接受到不同的訊號進行不同的處理,有的訊號需要傳遞給worker程序。

看ngx_start_worker_processes函式,這個函式中有乙個for迴圈,一次迴圈建立乙個worker程序,都是開啟父子程序之間的socketpair,, ngx_pass_open_channel函式將自己的資訊傳遞給別的所有程序。

ngx_spawn_process函式中建立socketpair,然後fork,子程序呼叫ngx_worker_process_cycle,。

ngx_worker_process_cycle這個函式也非常的重要,在ngx_worker_process_init函式中遮蔽了從父程序繼承的所有訊號處理函式,同時關閉從父程序繼承的socketpair套接字,這對socketpair,其中0為了寫,1為了讀,所以同時需要關閉自己的寫,只需要開啟自己讀即可,同時在讀的套接字上註冊ngx_channle_handler函式,這個函式是為了修改全域性變數的,為了worker程序接受父程序傳遞的訊號而存在的。ngx_add_channel_event將自己的1新增到監聽佇列中。接下來worker程序就進入了死迴圈,要麼處理事件,要麼處理訊號。

ngx_process_events_and_timers這個函式就是處理業務的。

接下來解析業務的整流程!

Nginx原始碼分析 程序管理之worker程序

本文著手分析一下worker程序的情況。首先找到worker程序的入口地方 ngx worker process cycle。這個函式不光是worker程序的入口函式,同時也是worker程序迴圈工作的主體函式,看函式名含有乙個cycle嘛。進入這個cycle函式,第一件事就是呼叫ngx worke...

nginx 原始碼分析

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

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

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