其他多线程框架中理想的线程池大小

时间:2017-06-18 12:24:26

标签: java multithreading threadpool executorservice

我正在使用多线程框架(Apache Tomcat),以及 编写我自己的服务(在资源内),使用固定的线程池大小(Java ExecutorService)来运行其任务。

如何确定与框架或其他服务池相关的理想池大小?

2 个答案:

答案 0 :(得分:1)

如上所述,线程池大小没有固定的规则。但是根据您的使用情况,可以使用一些建议或最佳实践。

CPU绑定任务

对于CPU绑定任务,Goetz(2002,2006)建议

threads = CPU数量+ 1

IO绑定任务

计算IO绑定任务的最佳数量不太明显。在IO绑定任务期间,CPU将处于空闲状态(等待或阻塞)。此空闲时间可以更好地用于启动另一个IO绑定请求。

Subramaniam(2011,p.31)根据以下公式描述了最佳线程数。

threads = number of cores * (1 + wait time / service time)

答案 1 :(得分:0)

没有办法确定"理想"不使用具有代表性工作负载的生产环境(生产硬件等)中的Web容器中运行应用程序的池大小。

换句话说,将池大小设置为配置参数并进行调整。

如果您在同一个Web容器中运行多个应用程序,则需要将它们一起调整。

我没有给出明确建议或公式的原因是最佳池大小将高度依赖于应用程序的性质和工作量。有一些公式可能适用于理想化的任务,但它们不太可能比第一次近似"更好。