8

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

提前致谢

4

2 回答 2

14

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

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

于 2011-06-10T07:56:30.200 回答
1

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

并在使用时将 0 循环到 max_descriptor 以检查事件select
但是使用epoll.

这些使性能有所不同。

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

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

于 2015-04-09T07:50:54.330 回答