我有点困惑。 epoll是否需要轮询循环检查fd是否准备就绪? 是完全同步的I / O操作是否意味着浪费cpu周期? 最后;是否有可能获得完全异步的I / O方法,如果i / o准备就通知内核?
答案 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 - 信号是完全异步通知。但是你实际上并不想这样,因为在没有造成死锁的情况下编程很头疼。如果你确实使用了它,你可能最终会将信号转换回某种同步通知。