如果一個線程(如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