gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:59:10 28 4
gpt4 key购买 nike

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

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

我们是否需要根据定义的线程池的数量全局计算大小和划分?

最佳答案

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

如果你有多个线程池,你还得考虑各个池中的线程是否会同时忙碌。

  • 如果它们是并且之前的假设对所有池都为真,则可以全局应用 nosCPUs + 1 规则;即所有池的大小之和。

  • 否则,计算出预测池的最佳大小的公式很可能过于复杂。


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

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

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


最后,我认为您应该重新审视让许多执行程序都有自己的线程池的决定。由于多个池中(长期)空闲线程的线程堆栈,这很容易导致内存浪费。此外,如果您有许多池要单独调整,则调整池大小的任务将更加困难。相反,如果您对所有池都有一个“调整旋钮”,您最终会针对所有池的最坏情况调整池大小。

您需要权衡这些问题/成本与拥有多个执行程序对您的应用程序的好处。 (我可以看到在某些用例中会有好处......)

关于java - 使用多个执行程序时,理想/最佳线程池大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47845759/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com