使用libev实现多线程套接字服务器

4
我正在实现一个套接字服务器。 所有客户端(最多10k)都应该保持连接。
以下是我的当前设计:
1.主线程创建一个事件循环(默认使用epoll)和一个用于接受客户端的观察器。 2.接受回调函数 - 接受fd并将其设置为非阻塞模式。 - 添加fd的观察器以监视读取事件。 3.读取回调函数 - 读取数据并添加任务到线程池以发送响应。
是否可以将读取部分移动到线程池中,或者有其他更好的建议? 谢谢。
1个回答

1
很难说。您不希望在后台运行10k个线程。您应该将读取部分保留在主线程中。这样,如果突然所有客户端都开始请求内容,您只会将这些资源堆积在线程池队列中(而不是同时运行10k个线程)。此外,通过避免在自己的线程之间进行一些不必要的上下文切换,您可能会获得更好的性能。

另一方面,如果您的客户端不太可能同时发送请求,或者回复非常简单,那么每个客户端只使用一个线程可能更简单,并避免主线程和线程池之间的上下文切换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接