use*_*812 3 c c++ linux linux-kernel socketserver
我在Linux上使用C编写了一个聊天服务器.我测试了相同的,它在性能方面工作得很好.唯一滞后的是我使用select系统调用来处理套接字描述符.由于select的限制为1024,所以最多我的聊天服务器只能同时处理1024个用户.
我知道我可以使用的另一个选项是民意调查,但与select相比,它的性能并不那么确定.
请建议我解决这种情况的最有效方法.
poll()可以用作几乎简单的替换select(),并允许你超过1024个文件描述符(你可以使数组传递到poll()你想要的大小).
它具有类似的性能特征select(),因为它们都需要内核和用户空间应用程序来扫描整个阵列 - 但是如果select()你可以正常工作,那么也poll()应该如此.(实际上有一点性能改进poll()- .events字段,指定您对每个文件描述符感兴趣的事件,不会更改poll(),因此您不必像每次调用那样重建数组,就像使用文件描述符一样集合传递给select()).
如果您后来发现自己遇到了由扫描轮询文件描述符数组引起的性能问题,您可以考虑切换到epoll接口,这更复杂,但是对于非常大量的文件描述符也可以更好地扩展.