【问题标题】:Thread pool sizing for network-bound tasks网络绑定任务的线程池大小
【发布时间】:2010-11-10 22:33:48
【问题描述】:

确定包含以下任务的线程池大小的基本规则是:

  • 始终是网络绑定的;
  • 以不同的吞吐量和延迟访问外部服务。

我主要关心的是优化使用带宽(不要连续处理任务,但也不要打开 1200 个网络连接);

【问题讨论】:

  • 这些网络连接是都对同一个端点开放,还是对许多不同的端点开放?

标签: networking threadpool


【解决方案1】:

你的网络访问是同步的还是异步的?

如果您的网络访问和请求处理是异步的,那么线程池大小可以是 => 可用内核数 + 1。

更新:可用内核是指系统上可用的物理处理器数量。即使服务器使用异步 I/O 来利用多个物理处理器,也需要线程池。

如果您的网络访问和请求处理是同步的,那么线程池的大小就没有硬性规定。在这种情况下,最好使线程池大小可配置。 假设您的请求处理不受 CPU 限制,默认值的猜测可能是:

(请求处理延迟/网络延迟)*(可用内核数 + 1) 最大值为 4 * 可用核心数。

【讨论】:

  • 那些线程除了从外部源读取网络数据之外什么都不做。 CPU 影响很小,所以我看不到内核数量是如何考虑的。
【解决方案2】:

我不是专家,但你不应该每个任务有一个线程吗? 线程将阻塞/轮询,直到数据可用。 如果您正在等待连接,则启动一个线程来处理连接处理程序中的每个连接。

【讨论】:

  • 感谢您的回答。我每个任务都有一个线程,但我会使用什么度量来估计任务数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2019-11-08
  • 2023-03-30
相关资源
最近更新 更多