epoll VS选择

时间:2011-06-10 07:53:16

标签: select epoll

我已经阅读了几本网络书籍,以了解epoll和select之间的差异,但他们只略微涵盖了这些概念。如果你们能为我提供细节方面的主要差异,我将不胜感激。

提前致谢

2 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:1)

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等)。