地址
https://github.com/langsim/nginx-1.6.2-comment
簡介
希望完成一份高可讀性的nginx源碼注釋。
不會注釋的內容
- spdy相關代碼,因為spdy已經被http2取代.
- 線程相關代碼,因為至少在1.6.2版本nginx的線程還處在實驗性階段.
- linux之外其他平台的代碼.
- epoll之外其他事件模型的代碼
- gcc之外其他編譯器的代碼.
- mail相關的代碼.
完成程度
- core目錄 60%
- event目錄 20%
- http目錄 10%
- os目錄 80%
函數鏈表
- http filter模組之間,ngx_http_top_header_filter和ngx_http_top_body_filter會形成兩個函數鏈表, 鏈表中函數的調用順序會和對應模組在ngx_modules數組的順序相反。
- http請求處理的11個階段中很多階段都可以多個回呼函數,同一個階段的回呼函數之間調用順序和對應模組在ngx_modules數組裡的順序相同。
日誌
nginx預設有兩個log檔案:
- access.log: 每一個http請求會在裡面產生一行記錄。
- error.log: nginx運行時的一些常規,錯誤或調試日誌。
進程模型
nginx啟動後可能出現四種進程狀態:
- 單進程前台運行
- 單進程守護進程模式
- 一個master進程,一個(或多個)worker進程,一個(或0個)cachemanager進程和一個(或0個)cacheloader進程共同在前台運行
- 一個master進程,一個(或多個)worker進程,一個(或0個)cachemanager進程和一個(或0個)cacheloader進程在守護進程狀態下運行。
- master進程在啟動是用於啟動其他進程,啟動完成後用於管理其他進程。
- woker進程,用於實際處理連結請求。
- cachemanager進程用於按要求清理cache檔案。
- cacheloader進程在啟動時會將cache目錄裡合格cache檔案在記憶體裡建立索引,不符合要求的cache檔案清除,然後退出。
- 啟動後給正在啟動並執行nginx的主進程發訊號,然後退出。
進程運行狀態的切換
- 重載設定檔(reload)
- 熱升級可執行檔
編譯
nginx的編譯與linux平台常規開源軟體的編譯方式相同,都是運行./configure && make && make install, 在./configure後可加入自己的自訂選項。
nginx使用訊號
- TERM, INT 快速關閉
- QUIT 從容關閉
- HUP 平滑重啟,重新載入設定檔
- USR1 重新開啟記錄檔,在切割日誌時用途較大
- USR2 平滑升級可執行程式
- WINCH 從容關閉背景工作處理序
nginx記憶體池
nginx有兩個記憶體池
- 在共用記憶體上分配記憶體用的記憶體池
- 在普通記憶體上申請記憶體用的記憶體池,目的是高效的利用記憶體
nginx使用到的計算hash演算法
- crc32
- crc16
- sha1
- murmurhash
- md5
nignx進程通訊與同步
- 共用記憶體的使用
- 訊號
- unix通訊端
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
').text(i)); }; $numbering.fadeIn(1700); }); });
以上就介紹了(個人開源)nginx源碼注釋,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。