Linux epoll如何检查就绪fd:同步还是异步?

How Linux Epoll Checks Ready Fd: Sync or Async?

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

Does epoll require polling loops checking if fd is ready ?

是的。你调用 epoll_wait 函数,它会等到任何 FD 就绪,然后告诉你哪些 FD 就绪。

Is it completely synchronous I/O operation

取决于您所说的 "synchronous" 是什么意思。 epoll_wait 将等待,除非你给它一个 0 毫秒的超时。

that means wasting cpu cycles or not ?

不,不是。

Finally; is it possible to obtain completely asynchronous I/O method that notifies kernel if i/o is ready ?

当 I/O 准备就绪时,您不会尝试通知内核,它已经知道了。您正在尝试让内核在 I/O 准备就绪时通知您的程序。

对于 "fully asynchronous notifications" you can get the kernel to send you a SIGIO signal - 信号是完全异步的通知。但是您实际上并不想要那样,因为在不产生死锁的情况下进行编程是一件令人头疼的事情。如果您确实使用了它,您可能最终会将信号转换回某种同步通知。