首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

nginx源码分析(四)——事件模型

2012-08-07 
nginx源码分析(4)——事件模型对于一个服务器来说,事件模型是至关重要的,nginx本身的高性能也要归功于其优秀

nginx源码分析(4)——事件模型

        对于一个服务器来说,事件模型是至关重要的,nginx本身的高性能也要归功于其优秀的事件模型。一般地,nginx的事件模型是基于epoll的,而使用epoll需要调用epoll_create、epoll_ctl和epoll_wait三个函数。由于nginx本身的松耦合模块机制,这些函数的调用被隐藏在很难发现的地方,本篇文章就来介绍nginx的事件模型的初始化过程,从而大家可以清晰的知道epoll各个函数的具体调用位置。

1. 重要的数据结构

        1. ngx_event_actions_t

        这个结构是nginx底层事件模型的抽象,具体的io模型会有自己的实现,比如epoll、select。通过这一层的抽象屏蔽了底层的不同实现,我们可以轻易从一种模型迁移至其他模型。这实际上就是C的面向接口编程,值得学习。在ngx_event.c中定义了全局变量ngx_event_actions,他指向具体的底层实现,在底层模型init函数中被赋值。

    if (ngx_posted_events) {        if (ngx_threaded) {            ngx_wakeup_worker_thread(cycle);        } else {            ngx_event_process_posted(cycle, &ngx_posted_events);        }    }
        在执行完ngx_process_events_and_timers后,会继续worker进程的主循环,然后一直不停的调用ngx_process_events_and_timers,让进程阻塞在epoll_wait上直到有事件发生,这个循环会一直不停,周而复始直到worker进程退出。

        上面在介绍事件模型初始化时,并没有提到监听socket的创建和初始化过程,还有一旦accept到新的连接,那么调用ngx_event_accpet后又会发生什么。这些内容会在后面的源码分析文章中一一介绍。




热点排行