码迷,mamicode.com
首页 > 系统相关 > 详细

linux-epoll-linux4.1.10

时间:2017-12-11 18:36:18      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:epoll-linux4.1.10

struct eventpoll {
?...
wait_queue_head_t wq;

调用epoll的进程会在这个waitqueue上睡眠???
wait_queue_head_t poll_wait;

每个epoll也是一个文件,所以他可以被其他epoll在监测,这个poll_wait就是文件的一个waitqueue,当把这个文件添加到另一个epoll监测时,会创建一个等待结构挂载到poll_wait上。

};

每个epoll对应一个eventpoll。


至于epoll的唤醒,就拿socket文件举例,当他可用时会调用到ep_poll_callback(当文件加入到epoll的监控时,会创建等待节点然后挂载到各自的等待队列上,而这个等待节点中的wakeup是ep_poll_callback,因为在ep_ptable_queue_proc中调用了init_waitqueue_func_entry,它没用到default_wake_function(可以唤醒一个进程)),该函数前半部的功能可查百度,后半部是调用wake_up_locked(&ep->wq),当调用epoll的进程发现无可用的文件描述符时就会睡眠在ep->wq这个waitqueue,wake_up_locked(&ep->wq)会调用到default_wake_function,从而唤醒进程,至于ep_poll_safewake(&ep->poll_wait),是为了一种迭代的情况(一个epoll监测另一个epoll的情况)。


linux-epoll-linux4.1.10

标签:epoll-linux4.1.10

原文地址:http://blog.51cto.com/2839840/2049467

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