3

我正在实现一个套接字服务器。所有客户端(最多 10k)都应该保持连接。

这是我目前的设计:

  1. 主线程创建一个事件循环(默认使用 epoll)和一个用于接受客户端的观察者。
  2. 接受回调
    • 接受 fd 并将其设置为非阻塞模式。
    • 为 fd 添加监视程序以监视读取事件。
  3. 读取回调
    • 读取数据并将任务添加到线程池以发送响应。

将读取部分移动到线程池是否可以,或者任何其他更好的主意?谢谢。

4

1 回答 1

1

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

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

于 2013-12-02T15:32:18.267 回答