我已经阅读了几本网络书籍,以了解 epoll 和 select 之间的区别,但它们仅略微涵盖了这些概念。如果你们能向我提供细节上的关键差异,我将不胜感激。
提前致谢
select
是执行异步 IO 的标准 Unix 工具。它的编程接口很古怪,它在大多数 Unix 中的实现充其量只是平庸。它还对进程可以观察的描述符的最大数量施加了限制,这在应用程序中很不方便。关于效率,性能select
通常随着描述符的数量线性下降。
epoll
在编程接口和效率方面是一个巨大的改进select
,但仅在 Linux 2.6 版本开始提供。其他 Unix 也有其专门的调用。
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等)