epoll VS 选择

Posted

技术标签:

【中文标题】epoll VS 选择【英文标题】:epoll VS select 【发布时间】:2011-09-12 07:24:54 【问题描述】:

我已经阅读了几本网络书籍,以了解 epoll 和 select 之间的区别,但它们只是稍微介绍了这些概念。如果你们能向我提供细节上的关键差异,我将不胜感激。

提前致谢

【问题讨论】:

***.com/questions/2032598/… 【参考方案1】:

select 是用于执行异步 IO 的标准 Unix 工具。它的编程接口很古怪,它在大多数 Unix 中的实现充其量只是平庸。它还对进程可以观察的描述符的最大数量施加了限制,这在应用程序中很不方便。在效率方面,select 的性能通常会随着描述符的数量线性下降。

epoll在编程接口和效率方面比select有了很大的改进,但仅在Linux 2.6版本开始提供。其他 Unix 也有其专门的调用。

【讨论】:

嗯,应该都是synchronous IO【参考方案2】:

select 在调用select() 时总是将描述符传递给内核。 但是epoll 在调用epoll_ctl() 时传递一次描述符并通过调用epoll_wait() 获取事件。

并且在使用select 时将 0 循环到 max_descriptor 以检查事件。 但是在使用 epoll 时,循环事件发生描述符以检查事件。

这些会影响性能。

select 有最大描述符数量限制,因为它使用位数组。 但是epoll没有限制,因为它使用结构数组。

select 存在于大多数平台(windows、linux、unix、bsd) 但是epoll只存在于linux中。 当然,其他平台也有epoll的替代品(windows中的IOCP,bsd中的kqueue等)

【讨论】:

以上是关于epoll VS 选择的主要内容,如果未能解决你的问题,请参考以下文章

epoll的水平触发和边缘触发

优化 Nginx 处理事件模型

epoll学习随笔

io_uring vs epoll ,谁在网络编程领域更胜一筹?

epoll 服务端 ET模式

epoll详解