nginx源碼分析(19)-方法(3)

 
nginx的三個部分:核心、事件模型/併發模型、應用模塊,之前已經詳細了分析了核心和事件模型/併發模型兩個部分,也詳細解釋了nginx的模塊化設計。

之 前的分析採用了平鋪直敘的方式,對源碼中主要函數進行了流程化的分解和剖析,經過這種分析方式,對nginx的認識越來越全面和深入,相關的領域知識和背 景知識也越來越豐富。但是這種分析方法比較直白,分析不夠深入和透徹,缺少總結和對比,只是闡述如何做,沒有闡述爲什麼那樣做,有沒有更好的方式等等更深 入的話題。

接下來先不去分析http和mail應用模塊。把核心和事件模型部分的分析結果整理一下,分解出一些關鍵和重要的專題進行論述,專題不會大而全,儘量透徹和深入,例如,可以針對nginx的內存相關的使用和管理組織成一個專題。

專題需要一些參照知識,選擇了《unix環境高級編程》、《unix網絡編程》和部分RFC文檔作爲主要資料,nginx的相關背景知識也可以從這些資料中獲取。

最 近手頭有一些後臺項目需要升級和優化,nginx的一些基礎設施可以抽取出來加入到這些項目實現中,這些基礎設施包括內存池、緩衝區和基本的數據結構。 nginx的這些基礎設施有良好的設計和清晰乾淨的接口,相比於其他的源碼,這個部分是最容易抽取出來的。毋庸置疑的是,這些基礎設施是nginx高效的 一個根本,不過這並不表示放到任何項目中都是高效的,不同的項目有不同的特點,關鍵是理解這些設計背後的權衡,在恰當的地方運用恰當的技術方案。

nginx 的基礎設施實現手法成熟,不僅接口設計的清晰乾淨,而且有極好的擴展性,很容易運用到其他項目中,難能可貴的是,這種優良的接口風格可以避免很多犯錯的可 能,例如內存池的接口設計,開發人員很少需要關注內存的釋放,只在確定不使用的時候調用destroy接口一次性釋放內存池的所有內存資源,其餘場合可以 利用alloc分配任意大小的內存,可以reset內存池避免重新分配和初始化,如果想減少內存碎片,可以在內存池之上實現自己的slab預分配策略,擴 展性很好。

nginx是非常少見的在功能和質量之間取得很好平衡的高性能服務器實現,可謂全身皆寶,值得花更長的時間鑽研和探討。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章