注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

偶有所得,记录在此

有分享交流才有进步,永远不要固步自封

 
 
 

日志

 
 

Nginx 进程模型  

2010-07-14 12:18:20|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Nginx 采用的是典型的 Master--Worker 模型。

Master 和 Worker 都有一张 ngx_processes 的进程表,进程之间都可以通过这个进程表找到相应的 socketpair 进行通信。

Master 完成系统的初始化并启动 Worker 进程,设置要监听的信号后,就进入 suspend 状态。

Master 要处理的信号,主要有以下几种:
  • shutting down
  • exiting
  • reconfiguring
  • reopening logs
  • changing binary
  • 其它略

Master 接收到信号后,通过 Channel 将相关信号传递给 Worker,Worker 根据信号执行相应的动作。

详细代码分析,请参考 Nginx 进程模型

Worker main loop

--------------------------------
Worker 在函数 ngx_worker_process_cycle 里面进入 main loop。

该 main loop 主要做两件事
for ( ;; ) {
  • 检测 Master 发来的管理指令,并执行相应的动作。
  • 处理 event 和 定时器事件 (ngx_process_events_and_timers)。
}

Event 处理有三种模式 
  • 即时处理。如 epoll wait 取的事件,直接调用 ev-handle(ev) 进行处理。
  • 给事件设置一个定时器。时间到再进行处理。
  • 将事件放入队列里面。在一个循环里面逐个处理。

函数 ngx_process_events_and_timers 处理的顺序如下。
  1. ngx_process_events               (这个也可能不会即时处理,仅仅将事件仍到事件队列里面)
  2. ngx_event_expire_timers        (处理定时器事件)
  3. ngx_event_process_posted    (处理事件队列里面的事件)
  评论这张
 
阅读(1148)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017