固定线程池的理想大小是多少?
What is ideal size of Fixed Thread pool?
固定线程池已用于限制 java 应用程序中的线程数,方法是将整数变量传递给执行程序方法,如下所示
Executors.newFixedThreadPool(10);
假设我们正在设计任何应用程序并且我们正在使用固定线程池,那么我们如何才能决定理想的固定线程池大小或者我们应该根据什么来决定固定线程池大小?
首先,
1.) 您是为整个应用程序还是为应用程序中的特定任务创建 FixedThreadPool
?
2.) 部署您的应用程序的服务器支持多少 CPU,每个 CPU 多少线程?
3.) 可能有这样一种情况,您分配的线程少于服务器拥有的线程,或者分配的线程可能更多,而您的任务不需要那么多。这或多或少是一种资源浪费。
线程池大小应该很少被硬编码;相反,池大小应该由配置机制提供或通过咨询 Runtime.availableProcessors
.
动态计算
更多,Java Concurrency in Practice有线程池的详细章节。
如果您正在寻找基于公式的方法,那么几乎找不到 - 当然您可以获得有关支持多少内核的信息,但是
重要的是要记住,如果您在容器中部署应用程序并且您的应用程序是使用框架和库构建的,那么您
您的系统中可能已经创建了许多提供多种服务的线程池。最重要的是,那种工作(CPU/IO 密集型也将发挥重要作用)。所以你最好的选择是从一些数字开始,然后分析你的应用程序并找到最佳位置。可以从 here 开始一个很好的猜测(如果您不确定您的应用程序的环境)。您可以通过连接 Jconsole 轻松查看应用程序中的所有线程,并且可以在中查看摘要
MBean -->java.lang --> 线程 --> 属性。
最后 - 在这些情况下,经验证据是最好的。
固定线程池已用于限制 java 应用程序中的线程数,方法是将整数变量传递给执行程序方法,如下所示
Executors.newFixedThreadPool(10);
假设我们正在设计任何应用程序并且我们正在使用固定线程池,那么我们如何才能决定理想的固定线程池大小或者我们应该根据什么来决定固定线程池大小?
首先,
1.) 您是为整个应用程序还是为应用程序中的特定任务创建 FixedThreadPool
?
2.) 部署您的应用程序的服务器支持多少 CPU,每个 CPU 多少线程?
3.) 可能有这样一种情况,您分配的线程少于服务器拥有的线程,或者分配的线程可能更多,而您的任务不需要那么多。这或多或少是一种资源浪费。
线程池大小应该很少被硬编码;相反,池大小应该由配置机制提供或通过咨询 Runtime.availableProcessors
.
更多,Java Concurrency in Practice有线程池的详细章节。
如果您正在寻找基于公式的方法,那么几乎找不到 - 当然您可以获得有关支持多少内核的信息,但是 重要的是要记住,如果您在容器中部署应用程序并且您的应用程序是使用框架和库构建的,那么您 您的系统中可能已经创建了许多提供多种服务的线程池。最重要的是,那种工作(CPU/IO 密集型也将发挥重要作用)。所以你最好的选择是从一些数字开始,然后分析你的应用程序并找到最佳位置。可以从 here 开始一个很好的猜测(如果您不确定您的应用程序的环境)。您可以通过连接 Jconsole 轻松查看应用程序中的所有线程,并且可以在中查看摘要 MBean -->java.lang --> 线程 --> 属性。
最后 - 在这些情况下,经验证据是最好的。