现在的位置: 首页 > 综合 > 正文

Nginx源码分析-事件循环

2012年11月04日 ⁄ 综合 ⁄ 共 5936字 ⁄ 字号 评论关闭

转载申明:本文可以任意转载,但需注明原文地址,谢谢!

 

事件循环这个概念貌似在windows编程中提得更多,Linux程序却很少提及这个概念。本文所提及的事件循环其实就是worker cycle,由于此处将关注的不再是worker进程,而是worker进程在循环过程中关于事件处理的环节,因此就盗用了事件循环这个概念。在具体看代码前,先看一下这个“循环”的概貌:

经过前面相关博文的介绍,我们了解到master进程创建好一个worker进程后,worker进程还会进行一个初始化工作,然后才会陷入“死”循环中。这个“死循环”也就是本文将谈及的事件循环,也就是上图中的黄色部分。整个黄色部份是由一个循环构成的,实际上,这个循环里将会做很多的事情,但本文将只关注图中红色标注的事件部分——ngx_process_events_and_timers。ngx_process_events_and_timers是一个函数(定义在src/event/ngx_event.c中)。接下来,就从这个函数开始进入事件驱动的核心。


 

 

ngx_process_events_and_timers一做完工作,就又回到了事件循环中去了,上图示;但会很快又会回到事件处理中来。


 

上文中,分析了事件循环中有关事件处理的过程;在分析的过程中,我们有提到对accept事件的处理,accept事件就是监听套接口上有新的连接到来的事件;接下来,我们分析一下accept事件的handler方法,看看accept事件的处理过程是如何的。accept事件的handler方法是ngx_event_accept(位于src/event/ngx_event_accept.c中),代码分析如下:

 

accept事件的handler方法也就是如此了。剩下的就是每个连接上的读写事件的handler方法没有分析了,这一部分的内容将直接带领我们进入http模块中,所以等我们把epoll看完了,再开始http模块的分析吧。

 

 

备注:今天太阳真好,趁太阳还没有下山,就此收尾,然后出去享受周末的阳光。

 

 

 

 

 

 

 

 

抱歉!评论已关闭.