民意调查与epoll洞察力[重复]

Posted

技术标签:

【中文标题】民意调查与epoll洞察力[重复]【英文标题】:poll vs. epoll insight [duplicate] 【发布时间】:2012-01-13 22:49:36 【问题描述】:

在低延迟环境中使用 pollepoll 时是否有一些简单的经验法则?如果只监视少数文件描述符,epoll 应该有更高的开销。请提供一些见解,将答案“自己检查”放在其他地方。

【问题讨论】:

个人轶事:我在单个进程(无线程,无分叉)异步 http 服务器中测试 epoll 与 poll 的结果(即,短连接时间, 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

首先,poll(2) 只是电平触发,但epoll(4) 既可以用作边缘触发接口,也可以用作电平触发接口。

现在复杂度:poll 观察描述符 (fds) 数量的复杂度为 O(n),因为它每次发生“就绪”事件时都会扫描所有 fds,epoll 基本上是 O(1),因为它不会对所有被监视的描述符进行线性扫描。

在可移植性方面——因为epoll 是特定于Linux 的,我建议查看libev 和libevent 库。 另外,请查看 Dan Kegel 的精彩文章:“The C10K problem”。

【讨论】:

我相信关于 epoll 和大 O 表示法的重点不是关于任何一个函数的内部,所以说“poll 扫描所有描述符而 epoll 扫描”是不正确的不是”。 它们都可能在单个事件上触发。但是,使用 poll 时,用户别无选择,只能遍历提交的整个列表以查找事件,而使用 epoll,您会得到一个仅包含实际事件的返回列表。这意味着如果服务器非常繁忙,epoll 没有任何优势。但是,如果您要长时间维护大量描述符... ...而且它们大部分时间都是空闲的,如果您有非常快速的事件,只涉及几个连接,epoll 将具有优势。即,O(whatever) 是关于用户实现的可能,而不是 poll/epoll 的实际行为。 最重要的一点:关于观察描述符(fds)数量的轮询复杂度是O(n),因为它每次发生'ready'事件时都会扫描所有fds,epoll基本上是O(1),因为它不会对所有观察到的描述符进行线性扫描。。所以epollpoll() 扩展得更好 根据我的测试,民意调查不是 O(N)。如果有任何描述符与事件匹配,它会立即返回。这是最坏的情况 O(N)。 在使用 epoll 时,您可以设置等待的最大事件数,因此在最坏的情况下 m 【参考方案3】:

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

【讨论】:

是的,它可以扩展,但是如果 fds 的数量很少,poll 应该会更快。 @James:我真的很想看看这方面的一些基准。根据个人经验,我会说,如果您对事件做出反应,则没有太大区别。鉴于您必须自己维护 poll 向量,我什至猜想 epoll 更快。重要的区别在于,正如这个答案中所述,poll 是 POSIX 的,因此更便携。 epoll 还具有提供更多功能的优势。

以上是关于民意调查与epoll洞察力[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Ivanti 洞察职场新趋势:71% 的员工宁愿放弃升职也要选择随处工作

开发者研究与洞察

是否可以在数据洞察计算中使用 BigQuery 重复字段?

Scala 的 TreeSet 与 Java 的 TreeSet - 民意调查?

寻找洞察力并应用 ML 流程

我对一些反射代码感到困惑,并寻找洞察力