ngx_cycle_t *cycle, init_cycle; init_cycle.pool = ngx_create_pool(1024, log);//创建内存池 if (init_cycle.pool == NULL) { return 1; } ... ... if (ngx_process_options(&init_cycle) != NGX_OK) { return 1; } cycle = ngx_init_cycle(&init_cycle); 可见在调用ngx_int_cycle之...
2.2pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, log); 创建一个内存池(memory pool),用于管理 Nginx 运行周期(cycle)中的内存分配 ngx_create_pool 是 Nginx 中用于创建内存池的核心函数。 它的主要功能是预分配一块连续的内存区域,并初始化相关的数据结构,以便后续高效地分配和管理内存。 NGX_CYCLE_POOL_S...
part.nelts; for (part = old_cycle->open_files.part.next; part; part = part->next) { n += part->nelts; } } else { n = 20; } if (ngx_list_init(&cycle->open_files, pool, n, sizeof(ngx_open_file_t)) != NGX_OK) { ngx_destroy_pool(pool); return NULL; } ...
ngx_cycle_t * ngx_init_cycle(ngx_cycle_t *old_cycle); 先看一下这个old_cycle參数从哪里来的: ngx_cycle_t *cycle, init_cycle; init_cycle.pool = ngx_create_pool(1024, log);//创建内存池 if (init_cycle.pool == NULL) { return 1; } ... ... if (ngx_process_options(&init_cycle...
ngx_init_cycle方法,顾名思义,就是用来构造ngx_cycle_t结构体中成员的,首先来介绍一下ngx_cycle_t中的成员(对于下面提到的connections、read_events、write_events、files、free_connections等成员,它们是与事件模块强相关的) 在构造ngx_cycle_t结构体成员的ngx_init_cycle方法中,上面所列出的pool内存池成员、host...
Nginx之main初探ngx_init_cycle()(上) 由于ngx_init_cycle()函数非常庞大,这里只给出前400+行的函数调用关系,后400+将在后面的文章中给出。 -->ngx_init_cycle(&init_cycle)-->ngx_timezone_update()-->time()-->localtime()注1:-->ngx_timeofday()-->ngx_time_update()-->ngx_gettimeofday()--...
// 前一个ngx_listening_t结构,多个ngx_listening_t结构体之间由previous指针组成单链表ngx_listening_t*previous;// 当前监听句柄对应着的ngx_connection_t结构体ngx_connection_t*connection;ngx_uint_tworker;// 标志位,为1则表示当前监听句柄有效,且执行ngx_init_cycle时不关闭监听端口,// 为0时则正常关闭。
因为ngx_listening_t存储监听有关的信息,ngx_connection_t存储连接有关的信息和读写事件,而ngx_cycle_t这个结构体几乎就是核心结构体,在nginx初始化时这个结构体存储了许多东西,而且它有个初始化的函数:ngx_init_cycle,这个函数的代码有700多行。可见这个结构体有多种要。于是就花了半天来找这几个结构体里面成员...
(old_cycle->shared_memory.part.nelts) { n = old_cycle->shared_memory.part.nelts; for (part = old_cycle->shared_memory.part.next; part; part = part->next) { n += part->nelts; } } else { n = 1; } if (ngx_list_init(&cycle->shared_memory, pool, n, sizeof(ngx_shm_zone...
最近在看Nginx源码,ngx_init_cycle()函数的第一项任务是ngx_timezone_update(),定义在src/os/unix/ngx_time.c中。其主要功能是更新时区,此函数的定义如下(只截取出Linux部分,因为这是个包含条件编译的函数),经gdb调试,确实是运行的这一部分代码: