为什么 poll 没有被 epoll 取代?

Nic*_*hen 8 linux

电平触发epoll非常类似于poll. 为什么不poll只是epoll支持后者的系统的包装器?

编辑:我的意思是,这样的决定是否存在任何技术障碍?实施pollasepoll将显着提高许多网络应用程序的性能。应该有一些我没有注意到的技术问题。

Nic*_*hen 6

好吧,7 年后,我根据Evan Klitzke 的这篇文章得到了更有说服力的答案。

首先,我首先问这个问题的原因是经常提到的epollpoll/相比的性能优势select。据说(O(1)) 比(O( Nepoll ))渐近效率更高。poll

不那么广为人知的是,只有边缘触发 epoll才是真正的 O(1),而电平触发 epoll具有相同的 O( N ) 渐进性。事实上,每次调用级别触发的风味时,它都必须遍历监视的 fd 列表,以查找可能还有更多待处理数据的 fd。边沿触发类型可以依赖信号来响应 fd 中出现的新字节。

弄清楚恢复的线程究竟如何找出哪个 fd 唤醒它会很有趣,但这个数据肯定有可能在 epoll 触发的唤醒期间传递。

显然,poll/select不能使用边缘触发 epoll,因为语义不同。正如我们所看到的,使用电平触发 epoll实现不会带来渐近的性能优势。如果常数因子或常数项很高,也可能会对它产生负面影响(因为它们似乎基于我所做的并在另一条评论中引用的粗略基准)。

有关更多信息,请阅读阻塞 I/O、非阻塞 I/O 和 Epoll