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 - 信号是完全异步的通知。但是您实际上并不想要那样,因为在不产生死锁的情况下进行编程是一件令人头疼的事情。如果您确实使用了它,您可能最终会将信号转换回某种同步通知。
我有点困惑。 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 - 信号是完全异步的通知。但是您实际上并不想要那样,因为在不产生死锁的情况下进行编程是一件令人头疼的事情。如果您确实使用了它,您可能最终会将信号转换回某种同步通知。