Linux Epoll如何检查就绪Fd:同步还是异步?

时间:2018-03-08 21:26:37

标签: c linux asynchronous synchronization epoll

我有点困惑。 epoll是否需要轮询循环检查fd是否准备就绪? 是完全同步的I / O操作是否意味着浪费cpu周期? 最后;是否有可能获得完全异步的I / O方法,如果i / o准备就通知内核?

1 个答案:

答案 0 :(得分:3)

  

epoll是否需要轮询循环检查fd是否准备就绪?

是。你调用epoll_wait函数,等待任何FD准备就绪,然后告诉你哪些FD准备就绪。

  

是完全同步的I / O操作

取决于“同步”的含义。 epoll_wait将等待,除非你给它超时0毫秒。

  

这意味着是否浪费cpu周期?

不,不。

  

最后;是否有可能获得完全异步的I / O方法,如果i / o准备就通知内核?

当I / O准备就绪时,你并没有尝试通知内核,它已经知道了。当I / O准备就绪时,您正试图让内核通知您的程序。

对于“完全异步通知”you can get the kernel to send you a SIGIO signal - 信号是完全异步通知。但是你实际上并不想这样,因为在没有造成死锁的情况下编程很头疼。如果你确实使用了它,你可能最终会将信号转换回某种同步通知。