nginx 緩衝區構造

langeldep發表於2013-04-07

nginx 緩衝區構造

和緩衝區有關的最基本的是三個結構:

ngx_buf_t、ngx_chain_t、ngx_bufs_t

分別代表 緩衝區、連結串列、緩衝區尺寸。

一塊快取區可以存放多段資料,因此在nginx中快取結構被這樣定義:

struct ngx_buf_s {
    u_char          *start; //緩衝區首部
    u_char          *end; //緩衝區尾部
    u_char          *pos; //當前指標所在位置
    u_char          *last; //有效資料的尾部
    ...
}

按照這種道理end永遠不小於last,例如快取區一共申請了10個單元,而目前只填充了6個單元,那麼last為6,end為10。

為了區分是那種型別的緩衝,在這個結構中還有一些標識,例如:

ngx_file_t      *file; //檔案結構指標
unsigned         memory:1; //是否在記憶體中
unsigned         mmap:1; //記憶體中的檔案對映
unsigned         recycled:1; //被回收
unsigned         in_file:1; //檔案緩衝
unsigned         flush:1; //被清除
unsigned         sync:1; //非同步
unsigned         last_in_chain:1; //連結串列的尾部
unsigned         temp_file:1; //是否是臨時檔案中的緩衝

通過一個8位儲存了一個緩衝區的8種狀態,在C語言裡這種方式比較經濟節省。在高階語言裡,是嘗不到這種便宜的。

連結串列結構ngx_chain_t是單向連結串列結構。

相關文章