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



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

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

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

CPU 密集型任务

对于 CPU 密集型任务,Goetz (2002, 2006( 建议

线程数 = CPU 数 + 1

IO 绑定任务

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

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

threads = number of cores * (1 + wait time / service time)
如果不在

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

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

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


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

相关内容

  • 没有找到相关文章

最新更新