我正在读一本关于C语言网络编程的书。它是从2004年开始的。 在示例代码中,作者使用选择 C函数接受来自客户端的多个连接。这个功能今天是否被弃用了?
我发现有多种方法可以接受多路复用I / O,例如民意调查和 epoll 。有什么好处?
答案 0 :(得分:6)
它没有被弃用,许多程序依赖它。
它不是最好的工具,因为它有一些限制:
select
操作它时重新初始化。如果这些与您无关,请随意使用。否则,如果您正在寻找跨平台解决方案,请使用poll
/ libevent,或者在某些极少数情况epoll
/ kqueue
中使用针对特定平台的优化解决方案。
答案 1 :(得分:4)
它的行为并未弃用,但其设计可能存在性能问题。例如,linux epoll() documentation表示:
API既可以用作边沿触发,也可以用作电平触发的 面对并大规模地观察大量观察文件描述符。
由于有效的替代方案特定于每个操作系统,因此比直接使用select()更好的选择是使用跨平台多路复用库(使用可用的最佳实现),例如:
如果您正在为特定操作系统进行开发,请使用推荐的高性能应用程序实现。
然而,由于有些人不喜欢I / O多路复用的当前库(由于“丑陋”),select仍然是一个可行的选择。