讨论/系统设计/如何合理地估算线程池大小?N 为 CPU 核数,2N+1/N+1 公式是怎么来的?/
如何合理地估算线程池大小?N 为 CPU 核数,2N+1/N+1 公式是怎么来的?

问题如描述,这里大家可以先忽略网上很多文章,因为基本内容都在这篇里:
http://ifeve.com/how-to-calculate-threadpool-size/
其中提到:

如何合理地估算线程池大小?N为cpu核数,2N+1/N+1公式是怎么来的?

但是这个估算公式是怎么来的呢?🙃

  • IO 密集计算,如何将硬件利用率达到极致呢 我们将 R = IO 耗时 / Cpu耗时 我们从上面的例子来看,如果 IO 耗时 / Cpu 耗时 = 10 (我们平常可以用工具 apm 来统计这个比例),创建线程 A 执行 io 操作,我们希望 IO 操作的时候 Cpu 不能闲着,所以就应该创建 10 个线程去执行 Cpu 计算,当 Io 操作完毕后刚好 Cpu 也执行完毕,他们的利用率都是百分之 100 在执行这段代码的时候。这个例子我们要创建 1 + 10 = 11 个线程执行起来效率更高,于是我们就得到了公式: 1 + I/O耗时 / Cpu耗时,如果是多核 Cpu 最佳线程数 = CPU 核数 * [ 1 +(I/O 耗时 / Cpu 耗时)。
  • Cpu 密集型,这个就很简单了,Cpu 的核数 = 线程数就行,一般我们会设置 Cpu 核数 + 1,防止由于其他因素导致线程阻塞等。
2
展开全部 2 讨论