我在 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/