【问题标题】:How Linux Epoll Checks Ready Fd: Sync or Async?Linux Epoll 如何检查 Ready Fd:同步还是异步?
【发布时间】:2018-03-08 21:26:36
【问题描述】:

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

【问题讨论】:

  • 同步和异步具体是什么意思?这些词在编程中可以有几种不同的含义。
  • 究竟是否需要cpu周期?
  • 你似乎有点困惑。在等待某些东西时,使用 select/epoll 的同步和异步调用都有效地等待(即阻塞调用线程)。
  • Martin 我试着了解内核是异步检查 io 就绪还是轮询?
  • 内核不检查“I/O 就绪”。 I/O 完成(或错误:) 通过硬件中断发出信号,该中断导致驱动程序代码运行,并且可以使您的等待线程准备好/运行,无论它如何等待、同步调用、异步等待用 select/epoll 什么的。

标签: c linux asynchronous synchronization epoll


【解决方案1】:

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

【讨论】:

  • immibis 如果 epoll_wait 不浪费任何 cpu 周期,那么完全异步通知是什么意思?我从你那里了解到 epoll_wait 是异步的,对吗?
  • @RedArrow 我不明白你认为异步是什么意思。
  • 我从异步中了解到“不轮询”
  • @RedArrow 啊..因此混乱:(
  • @RedArrow 什么是轮询?您必须使用 epoll 进行投票,但您不必忙于等待。
猜你喜欢
  • 1970-01-01
  • 2021-06-02
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多