当我们有poll()和epoll()时,为什么要使用select()

时间:2013-08-02 15:33:09

标签: c sockets posix-select

我查看了pollepollselect之间的差异。我不明白的是我应该何时使用select。鉴于pollepoll拥有select所拥有的所有内容,我认为没有任何优势。

2 个答案:

答案 0 :(得分:0)

从历史上看,select 于 1983 年在 BSD4.2 中首次出现。作为第一,它有幸成为最流行和最便携的。

也就是说,selectpoll 的扩展都非常糟糕。根据{{​​1}},select 缩放到O(highest_fd)poll 缩放到O(total_fds)LIBEV(3) 对于大量文件描述符的扩展性更好,但仅适用于 Linux。

使用 epolllibeventlibev 等事件库将提供一个抽象层并尝试使用系统上性能最高的方法,因此您不必担心在 libuvselectpollepoll(适用于 MacOS 和 BSD)之间进行选择。

答案 1 :(得分:-1)

select()监视文件描述符少于poll()。 而且,select()的一些实现只是使用poll()。