我正在阅读一本关于 C 网络编程的书。它是从 2004 年开始的。在示例代码中,作者使用select C 函数来接受来自客户端的多个连接。该功能今天已弃用吗?
我看到有不同的方式来接受多路复用 I/O,比如poll和epoll。有什么优势?
我正在阅读一本关于 C 网络编程的书。它是从 2004 年开始的。在示例代码中,作者使用select C 函数来接受来自客户端的多个连接。该功能今天已弃用吗?
我看到有不同的方式来接受多路复用 I/O,比如poll和epoll。有什么优势?
它没有被弃用,许多程序都依赖它。
它只是不是最好的工具,因为它有一些限制:
select
操作它时重新初始化。如果这些与您无关,请随意使用它。否则poll
,如果您正在寻找跨平台解决方案,或者在极少数情况下epoll
/kqueue
用于特定于平台的优化解决方案,请使用 /libevent。
它的行为并未被弃用,但其设计可能存在性能问题。例如,linux epoll() 文档指出:
API 既可以用作边缘触发接口,也可以用作电平触发接口,并且可以很好地扩展到大量监视的文件描述符。
由于有效的替代方案特定于每个操作系统,因此比直接使用 select() 更好的选择是使用跨平台多路复用库(它使用可用的最佳实现),示例如下:
如果您正在为特定操作系统进行开发,请使用针对高性能应用程序的推荐实现。
但是,由于有些人不喜欢当前用于 I/O 多路复用的库(由于“丑陋”),因此 select 仍然是一个可行的选择。