- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简短的问题,但对我来说很难理解。
为什么 ePoll 的扩展性比 Poll 更好?
最佳答案
poll 系统调用每次都需要将您的文件描述符列表复制到内核。这只会发生一次 epoll_ctl
,但不是每次都打电话epoll_wait
.
另外,epoll_wait
是 O(1)
关于观察的描述符数量1,这意味着您等待一个描述符还是等待 5,000 或 50,000 个描述符都没有关系。 poll
,同时比 select
更有效率,仍然必须每次都遍历列表(即,就描述符数量而言,它是 O(N)
)。
最后,除了“正常”模式之外,epoll 还可以在“边缘触发”模式下工作,这意味着内核在您收到准备就绪信号后不需要跟踪您读取了多少数据。这种模式更难掌握,但效率更高。
1David Schwartz 正确指出,epoll_wait
当然还是O(N)
关于发生的事件。对于任何界面,几乎没有任何不同的方式。如果在一个被监视的描述符上发生了 N 个事件,那么应用程序需要获得 N 个通知,并且需要做 N 个“事情”以便对正在发生的事情使用react。
这在边缘触发模式中再次略有不同,但没有根本不同,您实际上会得到 M
事件与 M <= N
.在边缘触发模式下,当同一事件(例如, POLLIN
)发生多次时,您收到的通知可能会更少,可能只有一个。但是,这对大 O 符号本身并没有太大改变。
然而,epoll_wait
与观看的描述符数量无关。假设它以预期的“正常”方式使用(即许多描述符,很少事件),这才是真正重要的,这里确实是 O(1)
.
作为类比,您可以考虑哈希表。哈希表访问其在 O(1)
中的内容,但有人可能会争辩说,计算散列实际上是 O(N)
关于 key 长度。这在技术上是绝对正确的,并且可能存在存在问题的情况,但是,对于大多数人来说,这并不重要。
关于epoll - 为什么 ePoll 的扩展性比 Poll 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5383959/
我正在使用 epoll 编写媒体服务器。 fds 都设置为非阻塞,我正在使用边缘触发事件。我知道对于 EPOLLIN,我需要循环读取 fd,直到返回 EAGAIN。但是写作呢? 当我想写入时,我将数据
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 8年前关闭
简短的问题,但对我来说很难理解。 为什么 ePoll 的扩展性比 Poll 更好? 最佳答案 poll 系统调用每次都需要将您的文件描述符列表复制到内核。这只会发生一次 epoll_ctl ,但不是每
情况: 多个进程共享同一个文件描述符表。 每个进程监听自己的 epoll 实例。 所有套接字和涉及它们的调用都是非阻塞的。 在这些进程中,只有进程A将监听套接字添加到它的epoll实例。 进程 A 知
我有几个线程,其中一个在循环中调用 epoll_wait,其他线程可以打开需要由第一个线程 epoll 的连接。是否可以只使用 epoll_ctl 添加新套接字,而另一个线程在 epoll_wait
众所周知,我们可以将poll/select与Netmap结合使用:http://info.iet.unipi.it/~luigi/netmap/ 是否可以使用epoll以及将epoll与Netmap一
我正在使用 epoll 和大量 fd 编写应用程序。 为了改进 fd 对应用程序相关 DB 的搜索,我想传递给 epoll 应用程序信息,例如 DB 数组中的索引。 我想过使用data->ptr(ep
我有一个多线程 epoll 服务器。我创建了一个 epoll fd,然后我将让 X 个线程休眠,等待 epoll_wait() 来自 SAME epoll fd 的任何事件。 现在我的问题是:如何唤醒
我有两个线程在 epoll 上运行。一个线程尝试与服务器建立 TCP 连接,使用 EPOLL_CTL_ADD 选项将套接字添加到 epoll-fd。 另一个线程负责等待添加到 epoll-fd 的 S
我正在使用 Cassandra,在启动期间,Netty 会打印一 strip 有堆栈跟踪的警告: Found Netty's native epoll transport in the classpa
epoll_wait、select 和 poll 函数都提供超时。然而使用epoll,其分辨率可达1ms。 Select 和 ppoll 是唯一提供亚毫秒级超时的。 这意味着最好以 1 毫秒的间隔做其
我正在使用 epoll 进行网络编程。我想知道检测用户断开连接的最佳方法。现在,我正在使用带有超时的选择来查看接收缓冲区中是否有信号并且在一定时间内没有信号然后关闭套接字连接。 我认为可能还有其他更适
epoll 是 Linux 系统中常用的多路复用 I/O 组件,一般用于监听 socket 是否能够进行 I/O 操作。那么,epoll 能监听普通文件吗? 我们先通过下面的例子来验证一下,e
我正在使用 epoll 将大消息写入使用 HTTP 协议(protocol)的服务器。 fds 都设置为非阻塞,我正在使用边缘触发事件。我知道对于 EPOLLIN,我需要循环读取 fd,直到返回 EA
我使用python的socket和epoll来制作一个Web服务器。我的操作系统是Linux CentOS 6,我的python版本是python 2.7.8。我的源代码是: # -*-coding:
我的 TCP 服务器中有一个 epoll 事件循环来处理客户端连接并从客户端读取数据。 while(1) { int n, i; n = epoll_wait(efd, events,
我有一个项目,我正在从普通的 select() 转换,但由于我运行的测试有超过 1000 个连接,我决定将其更改为 epoll。 我的代码可以正常工作,但遇到了一个问题,我正在尝试找出解决问题的最佳方
我是 linux 系统编程的新手,所以请多多关照。我必须通过 RS-422 在 8N1 模式下以波特率 921600 从串行端口 (/dev/ttyX) 读取数据,没有奇偶校验。stty 输出信号表示
我从here得到了基础知识关于 epoll。我知道epoll可以监控多个FD并处理。 我的问题是:重事件是否会阻塞服务器,所以我必须使用多线程? 例如,服务器的epoll正在监控2个套接字A和B。现在
我正在使用 epoll 进行网络编程。我想知道如何处理客户端断开连接。我阅读了 api 文档,epoll_wait 有一个超时参数。但是,如果 epoll_wait 函数或正在连接的客户端超时,我会感
我是一名优秀的程序员,十分优秀!