c++ - 关于处理超过 1024 个套接字描述符

标签 c++ c linux linux-kernel socketserver

我在 Linux 上使用 C 编写了一个聊天服务器。我已经对其进行了测试,并且在性能方面效果很好。唯一滞后的是我正在使用 select 系统调用来处理套接字描述符。由于 select 有 1024 个限制,所以我的聊天服务器最多只能同时处理 1024 个用户。

我知道我可以使用的另一个选项是 poll,但与 select 相比,我不太确定它及其性能。

请建议我解决这种情况的最有效方法。

最佳答案

poll() 可以用作 select() 的几乎直接替代品,并且允许您超过 1024 个文件描述符(您可以使 make传递给 poll() 的数组随您的需要而定)。

它将具有与 select() 相似的性能特征,因为两者都需要内核和用户空间应用程序扫描整个数组 - 但如果 select() 工作正常对你来说,poll() 也应该如此。 (实际上在 poll() 中有轻微的性能改进 - .events 字段,为每个文件描述符指定您感兴趣的事件, 没有改变>poll(),因此您不必像处理传递给 select() 的文件描述符集那样在每次调用之前重建数组。

如果你后来发现自己有扫描轮询文件描述符数组导致的性能问题,你可以考虑切换到 epoll 接口(interface),它更复杂,但对于非常大的文件也有更好的扩展性描述符。

关于c++ - 关于处理超过 1024 个套接字描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11044894/

相关文章:

c++ - 关于c++中的decltype

c - 如何查找数组中整数之间是否存在共同差异?

c - 如何读取字符串直到两个连续的空格?

c - x86 64 位中的额外寄存器

c - Linux Mint LMDE ffmpeg h264

c - 对 libusb_hotplug_register_callback 的 undefined reference

c++ - 一旦另一个事件发生,我的 libevent 计时器就会停止……这正常吗?

c++ - 如何让 Visual Assist 解析 Pro*C (*.pc) 文件?

c++ - C/C++ 中的领域特定语言,这是 Kosher 吗?

c++ - 如何找到G++优化C++代码的错误?