本篇博文想要回答的问题
1 epoll在nginx中的什么地方创建的,流程如何?
首先大方向上epoll的建立是在fork之后
从ngx_worker_process_cycle 这个函数开始看
ngx_worker_process_cycle
|
|___ngx_worker_process_init
|
|__ngx_modules[i]->init_process(cycle)
因为event模块有init_process函数,所以这里将会调用
ngx_event_process_init();
|
|__ module->action.init(cycle, ngx_timer_resolution)
因为我的linux上面默认用的是epoll,所以这里将调用
ngx_epoll_init函数
在ngx_epoll_init函数里面我们可以看到
ep = epoll_create(cycle->connection/2);
但是cycle->connection/2仅仅是一个hint
man epoll_create可以看到
since linux 2.6.8, the size argrment is unused.(The kernel dynamically
sizes the required data structures without needing this initial hint.)
在往下看, 我们看到
event_list = ngx_alloc(sizeof(struct epoll_event)*epcf->events, cycle->log);
在ngx_epoll_module.c中可以看到
static ngx_command_t ngx_epoll_commands[] = {
{ ngx_string("epoll_events"),
NGX_EVENT_CONF|NGX_CONF_TAKE1,
ngx_conf_set_num_slot,
0,
offset(ngx_epoll_conf_t, events),
NULL,}
....
};
从这里可以看出通过events模块的 epoll_events指令可以控制
event_list所指epoll_event的多少
可以参见
阅读(710) | 评论(0) | 转发(0) |