nginx 源码学习笔记(二十二)—— event 模块(三) ——epoll模块
上一节我们讲到了事件驱动的模块,它把我们引入epoll模块,今天我们主要学习下nginx如何使用epoll完成时间驱动,实现高并发;这里不详细讲解epoll原理,如果有机会再做一次单独的epoll的学习。
本文来自于:http://blog.csdn.net/lengzijian
回忆一下上一节的内容,在我们讲到ngx_process_events_and_timers时,在源码最后提到了ngx_process_events,这里是把我们引入epoll的入口:
1.先来看下ngx_process_events的宏定义:
2.继续查找ngx_event_actions,我们找到如下结构体:
a.我们去源代码中搜索下关键字ngx_event_actions:
前面三行表示:所有event模块对象中的actions就是ngx_event_actions_t对象,而ngx_event_action在第四行定义为全局变量,用于同一接口,下面又存在一个疑问,event模块到底做了些什么?
b.先找到ngx_event_module_t的结构体:
我们找一个例子来详细讲解下
这里有注释就不详细讲解了。
ngx_process_events这个函数就是我们要找的,要了好大一圈,ngx_process_events实际上就是调用这个函数,此处本人纠结,为什么作者不加点注释呢。
3.下面正式观察下ngx_epoll_init函数:
4.下面观察下主要的函数ngx_epoll_process_events: