C select()函数是否已被弃用?

时间:2013-09-15 12:48:19

标签: c io posix-select

我正在读一本关于C语言网络编程的书。它是从2004年开始的。 在示例代码中,作者使用选择 C函数接受来自客户端的多个连接。这个功能今天是否被弃用了?

我发现有多种方法可以接受多路复用I / O,例如民意调查 epoll 。有什么好处?

2 个答案:

答案 0 :(得分:6)

它没有被弃用,许多程序依赖它。

它不是最好的工具,因为它有一些限制:

  • 文件描述符的数量是有限的(特定于操作系统,通常可以通过内核重新编译来增加它。)
  • 不能很好地扩展(有很多fds):必须维护整个FD集,并在select操作它时重新初始化。

如果这些与您无关,请随意使用。否则,如果您正在寻找跨平台解决方案,请使用poll / libevent,或者在某些极少数情况epoll / kqueue中使用针对特定平台的优化解决方案。

答案 1 :(得分:4)

它的行为并未弃用,但其设计可能存在性能问题。例如,linux epoll() documentation表示:

API既可以用作边沿触发,也可以用作电平触发的        面对并大规模地观察大量观察文件描述符。

由于有效的替代方案特定于每个操作系统,因此比直接使用select()更好的选择是使用跨平台多路复用库(使用可用的最佳实现),例如:

如果您正在为特定操作系统进行开发,请使用推荐的高性能应用程序实现。

然而,由于有些人不喜欢I / O多路复用的当前库(由于“丑陋”),select仍然是一个可行的选择。