首页 > 系统服务 > 详细

linux-epoll-linux4.1.10

时间:2017-12-11 18:32:30      阅读:231      评论:0      收藏:0      [点我收藏+]
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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!