【问题标题】:What is ideal size of Fixed Thread pool?固定线程池的理想大小是多少?
【发布时间】:2016-09-01 01:42:13
【问题描述】:

固定线程池已被用于限制 java 应用程序中的线程数,方法是将整数变量传递给 executors 方法,如下所示

Executors.newFixedThreadPool(10);

假设我们正在设计任何应用程序并且我们正在使用固定线程池,那么我们如何决定理想的固定线程池大小,或者我们应该根据什么决定固定线程池大小?

【问题讨论】:

标签: java multithreading concurrency threadpool


【解决方案1】:

首先,

1.) 您是为整个应用程序还是为您应用程序中的特定任务创建 FixedThreadPool?

2.) 部署应用程序的服务器,支持多少 CPU,每个 CPU 有多少线程?

3.) 可能存在这样一种情况,即您分配的线程数少于服务器拥有的线程数,或者可能分配的线程数更多,而您的任务不需要那么多。这或多或少是在浪费资源。

线程池大小应该很少被硬编码;相反,池大小应由配置机制提供或通过咨询Runtime.availableProcessors 动态计算。

更多信息,Java Concurrency in Practice 有关于线程池的详细章节。

【讨论】:

  • 感谢 Ankur 的快速回复。提供的链接有详细的解释,可以回答我的问题。
【解决方案2】:

如果您正在寻找基于公式的方法,那么几乎没有 - 当然您可以获得有关支持多少核心的信息,但是 重要的是要记住,如果您将应用程序部署在容器中并且您的应用程序是使用框架和库构建的,那么您 您的系统中可能已经创建了许多提供多种服务的线程池。最重要的是那种工作(CPU / IO密集型也将发挥重要作用)。所以你最好的选择是从一些数字开始,然后分析你的应用程序并获得那个最佳位置。可以从here 开始一个很好的猜测(如果您不确定应用程序的环境)。您可以通过连接 Jconsole 轻松查看应用程序中的所有线程,并且可以在 MBean -->java.lang --> 线程 -->属性。

最后 - 在这些情况下,经验证据是最好的。

【讨论】:

    猜你喜欢
    • 2022-12-29
    • 1970-01-01
    • 2020-09-23
    • 2013-04-14
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    相关资源
    最近更新 更多