如果一个线程(如X)正在等待epoll_wait()
,另一个线程(比如Y)会调用epoll_ctl()
来注册对文件描述符9
的兴趣。先前在线程X中调用epoll_wait()
能否返回线程Y添加的文件描述符9
?对epoll_wait()
的初始呼叫在任何时候都不会在中间返回。epoll或kqueue可以处理文件描述符自身的异步添加
现在我想比较一下,并询问操作系统中另外两个轮询调用的相关问题。 poll()
和kqueue
- 如果回答上述问题是真的,那么有没有办法实现与
poll()
系统调用类似的行为? - 让我们假设
epoll_ctl()
是线程安全的,并且线程X可以安全地调用epoll_ctl()
并致电epoll_wait()
返回文件描述符9
是否已准备好进行I/O。声明对文件描述符感兴趣的函数和等待的函数的分离是什么使得该函数令人惊讶。但是人们经常将kqueue
和epoll
称为用于相同的功能。但kqueue
没有单独的函数来声明获取描述符的事件反馈的兴趣。有没有人知道kqueue
如何以与epoll
类似的方式使用?epoll
似乎是最好的线程安全的选项那里现在如果它允许线程“申报利益”
有了'kqueue'你可能*申报利益* *没有得到事件反馈*通过传递0作为'nevents'参数。看,例如,[这个答案](http://stackoverflow.com/questions/5756402/how-do-i-replace-select-with-kevent-for-higher-performance) – Tsyvarev