使用多个执行程序时,理想/最佳线程池大小是多少?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用多个执行程序时,理想/最佳线程池大小是多少?相关的知识,希望对你有一定的参考价值。

从很多帖子我可以读到关于最大池大小的公式,这取决于CPU + 1的数量。这是一个明确的解释。

但是,如果应用程序定义了许多Executor或ThreadPoolExecutor,该怎么办呢?然后我们还必须考虑应用程序共享相同的硬件。这对池大小选择有何影响。

我们是否需要全局计算大小和它取决于定义的线程池数量的除法?

答案

nosCPUs + 1“经验法则”假定线程将受CPU限制(不受I / O限制),并且不存在显着的锁争用。这对于典型应用来说是不现实的。

如果您有多个线程池,则还必须考虑相应池中的线程是否将同时处于忙碌状态。

  • 如果它们是AND并且之前的假设适用于所有池,那么nosCPUs + 1规则可以全局应用;即所有池的大小之和。
  • 否则,找出预测池的最佳大小的公式很可能太复杂。

实际上,典型的多线程应用程序的行为非常复杂,以至于nosCPUs + 1规则没有给出最佳的线程数。此外,您通常无法导出允许您准确预测最佳线程数的公式。

相反,通常的做法是使线程池大小/大小成为可调参数或属性,并调整它们以获得典型工作负载的良好性能。如果您的应用程序只有一个线程池,它将使调优更容易,但可能有理由不这样做。

但好消息是,有限的线程池的性能影响有点过大通常并不重要。当池大小太大时,会出现问题(内存使用,争用,上下文切换等)。

以上是关于使用多个执行程序时,理想/最佳线程池大小是多少?的主要内容,如果未能解决你的问题,请参考以下文章

线程池任务执行器,,,最大池大小是多少,核心池大小可以在java中定义

play框架使用起来(12)

线程池全面解析

java应用中可以有多少 线程池

浅谈Java线程池

play框架使用起来(12)