epoll VS select

epoll VS select,select,epoll,Select,Epoll,我读了几本网络方面的书来了解epoll和select之间的区别,但它们只是稍微介绍了这个概念。如果你们能提供我在细节上的主要区别,我将不胜感激 提前感谢选择是执行异步IO的标准Unix工具。它的编程接口很古怪,在大多数Unix中的实现充其量也很平庸。它还限制了进程可以查看的描述符的最大数量,这在应用程序中很不方便。关于效率,select的性能通常随着描述符的数量线性下降 就编程接口和效率而言,epoll是对select的巨大改进,但仅在从2.6版开始的Linux中提供。其他unix也有专门的调用

我读了几本网络方面的书来了解epoll和select之间的区别,但它们只是稍微介绍了这个概念。如果你们能提供我在细节上的主要区别,我将不胜感激


提前感谢

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


就编程接口和效率而言,
epoll
是对
select
的巨大改进,但仅在从2.6版开始的Linux中提供。其他unix也有专门的调用。

select
调用
select()时始终将描述符传递到内核。

但是
epoll
在调用
epoll\u ctl()
时传递一次描述符,并通过调用
epoll\u wait()
获取事件

使用
选择
时,将0循环到max_描述符以检查事件
但使用
epoll
时,用于检查事件的事件发生循环描述符

这些使性能有所不同

select
由于使用位数组,所以描述符的最大数量受到限制。
但是,
epoll
没有限制,因为它使用结构数组

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