我已经阅读了几本网络书籍,以了解epoll和select之间的差异,但他们只略微涵盖了这些概念。如果你们能为我提供细节方面的主要差异,我将不胜感激。
提前致谢
答案 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等)。