Chinaunix首页 | 论坛 | 博客
  • 博客访问: 444529
  • 博文数量: 138
  • 博客积分: 4114
  • 博客等级: 上校
  • 技术积分: 1341
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-14 20:41
文章分类

全部博文(138)

文章存档

2014年(1)

2013年(2)

2012年(78)

2011年(13)

2010年(34)

2009年(10)

我的朋友

分类: LINUX

2012-05-14 09:53:46

本篇博文想要回答的问题
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的多少
可以参见


                    
阅读(711) | 评论(0) | 转发(0) |
0

上一篇:epoll 多进程

下一篇:nginx event

给主人留下些什么吧!~~