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 选择的主要内容,如果未能解决你的问题,请参考以下文章