【发布时间】:2010-11-10 22:33:48
【问题描述】:
确定包含以下任务的线程池大小的基本规则是:
- 始终是网络绑定的;
- 以不同的吞吐量和延迟访问外部服务。
我主要关心的是优化使用带宽(即不要连续处理任务,但也不要打开 1200 个网络连接);
【问题讨论】:
-
这些网络连接是都对同一个端点开放,还是对许多不同的端点开放?
标签: networking threadpool
确定包含以下任务的线程池大小的基本规则是:
我主要关心的是优化使用带宽(即不要连续处理任务,但也不要打开 1200 个网络连接);
【问题讨论】:
标签: networking threadpool
你的网络访问是同步的还是异步的?
如果您的网络访问和请求处理是异步的,那么线程池大小可以是 => 可用内核数 + 1。
更新:可用内核是指系统上可用的物理处理器数量。即使服务器使用异步 I/O 来利用多个物理处理器,也需要线程池。
如果您的网络访问和请求处理是同步的,那么线程池的大小就没有硬性规定。在这种情况下,最好使线程池大小可配置。 假设您的请求处理不受 CPU 限制,默认值的猜测可能是:
(请求处理延迟/网络延迟)*(可用内核数 + 1) 最大值为 4 * 可用核心数。
【讨论】:
我不是专家,但你不应该每个任务有一个线程吗? 线程将阻塞/轮询,直到数据可用。 如果您正在等待连接,则启动一个线程来处理连接处理程序中的每个连接。
【讨论】: