使用多个执行程序时,理想/最佳线程池大小是多少?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用多个执行程序时,理想/最佳线程池大小是多少?相关的知识,希望对你有一定的参考价值。
从很多帖子我可以读到关于最大池大小的公式,这取决于CPU + 1的数量。这是一个明确的解释。
但是,如果应用程序定义了许多Executor或ThreadPoolExecutor,该怎么办呢?然后我们还必须考虑应用程序共享相同的硬件。这对池大小选择有何影响。
我们是否需要全局计算大小和它取决于定义的线程池数量的除法?
答案
nosCPUs + 1
“经验法则”假定线程将受CPU限制(不受I / O限制),并且不存在显着的锁争用。这对于典型应用来说是不现实的。
如果您有多个线程池,则还必须考虑相应池中的线程是否将同时处于忙碌状态。
- 如果它们是AND并且之前的假设适用于所有池,那么
nosCPUs + 1
规则可以全局应用;即所有池的大小之和。 - 否则,找出预测池的最佳大小的公式很可能太复杂。
实际上,典型的多线程应用程序的行为非常复杂,以至于nosCPUs + 1
规则没有给出最佳的线程数。此外,您通常无法导出允许您准确预测最佳线程数的公式。
相反,通常的做法是使线程池大小/大小成为可调参数或属性,并调整它们以获得典型工作负载的良好性能。如果您的应用程序只有一个线程池,它将使调优更容易,但可能有理由不这样做。
但好消息是,有限的线程池的性能影响有点过大通常并不重要。当池大小太大时,会出现问题(内存使用,争用,上下文切换等)。
以上是关于使用多个执行程序时,理想/最佳线程池大小是多少?的主要内容,如果未能解决你的问题,请参考以下文章