在低延迟环境中使用poll
与epoll
时,是否有一些简单的经验法则?如果只监控少量文件描述符,epoll
应该有更高的开销。请提供一些见解,将答案“自己检查”放在其他地方。
答案 0 :(得分:14)
除非满足以下所有条件,否则请始终使用poll
:
epoll
的(Linux)系统,或者您可以为不支持的系统提供备用。epoll
列表中添加/删除文件描述符与poll
操作一样昂贵,因为它需要进入/离开内核空间)。答案 1 :(得分:11)
首先,poll(2)
只是水平触发,但epoll(4)
可以用作边缘或水平触发的界面。
现在复杂度:poll
关于观察描述符数量(fds)的复杂度是O(n),因为它每次发生“就绪”事件时都扫描所有fds,epoll
基本上是O( 1)因为它不对所有观察的描述符进行线性扫描。
就可移植性而言 - 由于epoll
是特定于Linux的,我建议您查看libev和libevent库。
另外,请查看Dan Kegel的精彩文章:“The C10K problem”。
答案 2 :(得分:3)
epoll(7)
简洁地总结了它:epoll
“可以很好地扩展到大量观看的文件描述符。”但是,poll
是POSIX标准接口,因此在需要可移植性时使用它。