ngx——内存池管理

2022/4/29 7:14:21

本文主要是介绍ngx——内存池管理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 有哪些内存池

init_cycle.pool : 用于初始化时使用,初始化后一定被释放

   196 main(int argc, char *const *argv)
   253     init_cycle.pool = ngx_create_pool(1024, log);
   292     cycle = ngx_init_cycle(&init_cycle);

cycle->pool : 伴随整个工作周期,直到 重新加载配置
conf->temp_pool : 当配置解析完后,释放
conf->pool : 等于 cycle->pool
ngx_temp_pool : 30s后释放

    38 ngx_cycle_t *
    39 ngx_init_cycle(ngx_cycle_t *old_cycle)
    40 {
    69     pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, log);
    81     cycle->pool = pool;

   260     conf.temp_pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, log);
   269     conf.pool = pool;

   767     ngx_destroy_pool(conf.temp_pool);


   778     if (ngx_temp_pool == NULL) {
   779         ngx_temp_pool = ngx_create_pool(128, cycle->log);
   788         if (ngx_array_init(&ngx_old_cycles, ngx_temp_pool, n,
   789                            sizeof(ngx_cycle_t *))
   790             != NGX_OK)
   791         {
   792             exit(1);
   793         }
  797         ngx_cleaner_event.handler = ngx_clean_old_cycles;
   801     }
   802
   803     ngx_temp_pool->log = cycle->log;
   804
   805     old = ngx_array_push(&ngx_old_cycles);
   806     if (old == NULL) {
   807         exit(1);
   808     }
   809     *old = old_cycle;
   811     if (!ngx_cleaner_event.timer_set) {
   812         ngx_add_timer(&ngx_cleaner_event, 30000);
   813         ngx_cleaner_event.timer_set = 1;
   814     }
   815
   816     return cycle;
  1365 static void
  1366 ngx_clean_old_cycles(ngx_event_t *ev)
  1367 {
  1379     cycle = ngx_old_cycles.elts;
  1380     for (i = 0; i < ngx_old_cycles.nelts; i++) {
  1405         ngx_destroy_pool(cycle[i]->pool);
  1407     }
  1415         ngx_destroy_pool(ngx_temp_pool);


这篇关于ngx——内存池管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程