Unix(AIX,HP-UX)和Linux(RedHat,Ubuntu)之间的boost :: asio的实现有何不同?

时间:2013-06-28 22:57:42

标签: boost-asio

在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之间的boost :: asio的实现方面存在差异( RedHat,Ubuntu)?

1 个答案:

答案 0 :(得分:1)

platform specific implementation notes描述了支持的平台以及如何实现事件多路分解。较新的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)。在epoll描述符中添加描述符时,使用epoll具有epoll_event结构的概念。这意味着修改要等待的事件列表有点昂贵,但在O(1)等待这些事件的速度非常快。