nginx源碼初讀(3)--讓煩惱從main開始ngx_pool

來源:互聯網
上載者:User
nginx_pool提供了一種資源管理機制(如記憶體,檔案等),使得對資源的使用和釋放統一進行,免除了資源釋放的很多問題,開發人員只需在需要記憶體時進行申請即可,不用過多考慮記憶體的釋放等問題,大大提高了開發的效率。

例如,在特定的生命週期統一建立記憶體池(如main函數系統啟動初期即分配1024B大小的記憶體池),需要記憶體時統一分配記憶體池中的記憶體,在適當的時候釋放記憶體池的記憶體(如關閉http連結時調用ngx_destroy_pool進行銷毀)。

typedefstruct ngx_pool_s        ngx_pool_t;typedefstruct ngx_pool_cleanup_s  ngx_pool_cleanup_t;typedefvoid (*ngx_pool_cleanup_pt)(void *data);struct ngx_pool_cleanup_s {    ngx_pool_cleanup_pt   handler;    void                 *data;    ngx_pool_cleanup_t   *next;};typedefstruct ngx_pool_large_s  ngx_pool_large_t;struct ngx_pool_large_s {    ngx_pool_large_t     *next;    void                 *alloc;};typedefstruct {    u_char               *last;    u_char               *end;    /* 分別指當前記憶體池的分配位置(下次從last分配記憶體)和結束位置(記憶體用光啦)     * if ((size_t) (p->d.end - m) >= size) {           p->d.last = m + size;           return m;       }       */    ngx_pool_t           *next;    /* 指向下一個pool記憶體塊(當pool記憶體不足的時候會調用palloc_block來建立一塊新的pool並分配記憶體)     * psize = (size_t) (pool->d.end - (u_char *) pool);       m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);       new = (ngx_pool_t *) m;       p->d.next = new;     */    ngx_uint_t            failed;     /* 當前block記憶體配置失敗次數,從這段代碼看應該current是用來記錄要建立記憶體塊的搜尋位置?       因為它記錄了從這一塊開始記憶體不夠用,而failed是為了重新導向current而存在的,減少遍曆數量(在4以內)     * for (p = pool->current; p->d.next; p = p->d.next) {          if (p->d.failed++ > 4) {              pool->current = p->d.next;          }       }     */} ngx_pool_data_t;struct ngx_pool_s {    ngx_pool_data_t       d;    size_t                max;    ngx_pool_t           *current;    ngx_chain_t          *chain;    ngx_pool_large_t     *large;    ngx_pool_cleanup_t   *cleanup;    ngx_log_t            *log;};

').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源碼初讀(3)--讓煩惱從main開始ngx_pool,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.