linux epoll java_linux-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的情况)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值