在 Windows 中,完成事件队列由操作系统实现,并与 I/O 完成端口相关联。 http://www.boost.org/doc/libs/1_37_0/doc/html/boost_asio/overview/core/async.html
但是这个(select、epoll 或 kqueue)在 Unix 和 Linux 上用于最大性能是什么,在 Unix(AIX,HP-UX)和 Linux(RedHat,Ubuntu )?
在 Windows 中,完成事件队列由操作系统实现,并与 I/O 完成端口相关联。 http://www.boost.org/doc/libs/1_37_0/doc/html/boost_asio/overview/core/async.html
但是这个(select、epoll 或 kqueue)在 Unix 和 Linux 上用于最大性能是什么,在 Unix(AIX,HP-UX)和 Linux(RedHat,Ubuntu )?
平台特定的实现说明描述了支持的平台以及如何实现事件解复用。较新的 Linux 内核将使用epoll(4)
,而较旧的版本使用select(2)
. AIX 和 HP-UX 都使用select(2)
.
kqueue(2)
用于 BSD 系统,包括 Mac OS X 和 iOS。它与 Linux 上的非常相似epoll
。
一般来说,epoll
会表现得比select
. 使用 时select
,它对n
描述符列表执行线性搜索,即O(n
)。使用 epollepoll_event
在 epoll 描述符中添加描述符时有结构的概念。这意味着修改要等待的事件列表有些昂贵,但等待这些事件的速度非常快O(1)
。