nginx研究笔记(1)

nginx是最近比较火的一个web server。 目前我正在读它的源码,网上可参考的资料非常少,大致列下吧

 

http://nginx.org/

http://wiki.nginx.org/NginxChs

 

这个小巧且强大的web server是一个俄罗斯人单枪匹马弄出来的,佩服

 

main函数:

 

main函数可以在 core/nginx.c 中找到, 开始先call了一堆ngx_xxx_init的初始化函数,暂时跳过,接下来将构建一个ngx_cycle_t的结构体,这个结构体将在下面ngx_master_process_cycle/ngx_single_process_cycle中被调到,初始该结构的函数名为ngx_init_cycle。接下来,如果可能,main调用ngx_daemon以后台方式运行,并创建一个pid文件。最后调用ngx_single_process_cycle或ngx_master_process_cycle

 

ngx_init_cycle函数:

ngx_init_cycle首先构建一个memory pool,然后初始化一些list结构,line210 - 225中,ngx_init_cycle首先初始化NGX_CORE_MODULE,其中create_conf 和 init_conf 是module需要提供出来的调用接口。接着打开新的文件和共享内存,并调用ngx_open_listening_sockets对cycle->listening这个sockets array进行初始化。接下来ngx_init_cycle对每一个module调用init_module接口。

对于type是NGX_CORE_MODULE的模块,比较典型的有:

ngx_core_module,ngx_events_module,ngx_http_module,ngx_errlog_module,ngx_mail_module

 

ngx_master_process_cycle函数:

ngx_master_process_cycle主要调用ngx_start_worker_processes和ngx_start_cache_manager_processes。ngx_start_worker_processes将创建worker_processes个工作进程。而此时master进程将等待子进程结束。

 

ngx_start_worker_processes函数:

ngx_start_worker_processes中通过调用ngx_spawn_process来fork一个ngx_worker_process_cycle进程。ngx_worker_process_cycle会创建ngx_threads_n个线程,该值由worker_threads指定。线程的主函数是ngx_worker_thread_cycle。接下来该进程函数将调用ngx_process_events_and_timers。

 

ngx_worker_thread_cycle函数:

该函数调用ngx_event_thread_process_posted,这里ngx_event_thread_process_posted会从全局事件队列ngx_posted_events中将事件一个个取出并调用handle接口来处理。handler接口是ngx_event_s结构中的成员函数,比较常用的如ngx_epoll_eventfd_handler,是基于epoll调用的异步事件处理例程

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值