【问题标题】:Is signal driven I/O actually deprecated by epoll in practice under linux? [closed]在Linux下的实践中,信号驱动的I/O实际上是否被epoll弃用了? [关闭]
【发布时间】:2018-08-13 15:26:29
【问题描述】:

根据本书The Linux Programming Interface

与信号驱动 I/O 相比,epoll 提供了许多优势。

我们可以放心地说:

信号驱动的 I/O 实际上已经被 epoll 在 linux 下的实践中弃用了?

【问题讨论】:

  • 如果您打算在新应用程序中使用信号驱动 I/O,您可能需要为此提出理由。
  • 我认为可以公平地说,信号驱动的 I/O 总是一个可怕且缺乏支持的组合,而 Unix 真的希望你使用 任何其他方法多路复用 I/O,甚至是普通的旧 select。但是,在某些情况下,在某种程度上使用信号是不可避免的(例如,多路复用 wait-for-I/O 和 wait-for-child-process),我不知道 epoll 是否已经解决了所有这些问题,但是如果有的话肯定会很好。
  • 让我建议您将问题改写为“如果您不关心可移植性,并且正在充分利用 Linux 特定的 API,例如 epollsignalfd 等,是否有在任何剩余的情况下,您仍然必须使用异步信号处理程序来处理某些事情?”这是一个范围合理、没有意见的问题。

标签: c linux performance io portability


【解决方案1】:

如果我们假设“信号驱动 I/O”指的是 POSIX aio(异步 I/O)设施,使用 aio_sigevent 通知方法,那么可以说大多数网络应用程序都需要异步操作会偏爱epoll 而不是aio。弃用可能有点强烈。

我确实想指出,aio 设施在磁盘 I/O 方面胜过epollaiocb 结构允许为操作指定aio_writeaio_read 命令的偏移量。因此,多个文件 I/O 操作可以在文件中的许多不同偏移量上并行发生。带有epoll 的传统文件描述符 I/O 通常会被序列化为流操作,其中下一个操作从先前完成的操作停止的地方继续。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 2019-12-15
    • 2012-10-21
    • 2011-03-28
    • 2018-10-01
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多