民意调查与epoll见解

Car*_*s00 17 c c++ linux gcc

是否有经验的一些简单的规则时使用pollepoll在低延迟环境?epoll如果只监控少量文件描述符,则应该有更高的开销.请提供一些见解,答案"自己检查"放在别处.

R..*_*R.. 16

poll除非满足以下所有条件,否则始终使用:

  1. 您可以确保您使用(Linux)系统,epoll或者为没有的系统提供备用.
  2. 您有大量的文件描述符处于活动状态(至少1000-10000).
  3. 您正在使用的文件描述符集在很长一段时间内是稳定的(从epoll列表中添加/删除文件描述符与poll操作一样昂贵,因为它需要进入/离开内核空间).


pla*_*aes 11

首先,poll(2)只是电平触发,但epoll(4)可以用作边沿或电平触发的接口.

现在复杂性:poll关于观察描述符(fds)数量的复杂性是O(n),因为它每次发生"就绪"事件时扫描所有fds,epoll基本上是O(1),因为它不会对所有事件执行线性扫描被观察的描述符.

在可移植性方面 - epoll特定于Linux,我建议查看libevlibevent库.另外,看看Dan Kegel的优秀写作:" C10K问题 ".

  • 我相信关于epoll和大O符号的观点是*不是关于任一函数*的内部,所以说"轮询扫描所有描述符而epoll不是"是不正确的.*它们都可能触发单个事件*.但是,使用轮询,用户则别无选择,只能通过提交的整个列表进行迭代以查找事件,而使用epoll则返回仅包含实际事件的列表.这意味着如果服务器非常繁忙,epoll就没有优势.但是,如果你长时间维护大量的描述符...... (2认同)
  • ...并且它们中的大多数大部分时间都是空闲的,如果您的事件非常快速且仅涉及几个连接,则 epoll 将具有优势。即,O(whatever) 是关于用户实现的“可能”,而不是 poll/epoll 的实际行为。 (2认同)

Fre*_*Foo 6

epoll(7)简洁地总结道:epoll“可以很好地扩展到大量监视的文件描述符。” 但是,poll它是 POSIX 标准接口,因此在需要可移植性时使用它。

  • @James:我真的很想看到一些关于此的基准。根据个人经验,我想说,如果你做一些事情作为对事件的反应,那么没有太大区别。鉴于您必须自己维护 poll 向量,我什至猜测 epoll 更快。重要的区别是,如本答案所述,poll 是 POSIX,因此更便携。epoll 还具有提供更多功能的优点。 (5认同)