ITPub博客

首页 > IT职业 > IT图书 > linux-epoll-linux4.1.10

linux-epoll-linux4.1.10

IT图书 作者:lakefront 时间:2021-09-09 09:49:39 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的情况)。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2491/viewspace-2813049/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-05

  • 博文量
    99
  • 访问量
    625