码迷,mamicode.com
首页 > 其他好文 > 详细

【Nginx】epoll事件驱动模块

时间:2014-07-24 21:22:56      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:使用   re   c   linux   用户   对象   存储   nginx   

当某个进程调用epoll_create方法时,linux内核会创建一个eventpoll结构体,这个结构体中有两个成员与epoll的使用方式密切相关。

struct eventpoll

{

  struct rb_root rbr;//红黑树的根结点,这棵树中存储着所有添加到epoll中的事件,也就是这个epoll监控的事件

  struct list_head rdllist;//双向链表rdllist保存着将要通过epoll_wait返回给用户的满足条件的事件

};

每一个epoll对象都有一个独立的eventpoll结构体,这个结构体会在内核空间中创造独立的内存,用于存储使用epoll_ctl方法向epoll对象中添加进来的事件。这些事件都会挂到rbr红黑树中,这样,重复添加的事件就可以通过红黑树高效地识别出来。

当相应的事件发生时会调用这里的回调方法,这个回调方法在内核中叫做ep_poll_callback,它会把这样的事件放到上面的rdllist双向链表中。当调用epoll_wait检查是否有发生事件的连接时,只是检查eventepoll对象中的rdllist双向链表是否有epitem元素而已,如果rdllist链表不为空,则把这里的事件复制到用户态内存中,同时将事件数量返回给用户。

【Nginx】epoll事件驱动模块,布布扣,bubuko.com

【Nginx】epoll事件驱动模块

标签:使用   re   c   linux   用户   对象   存储   nginx   

原文地址:http://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3865740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!