在决定线程池大小时,如何理解“将每个任务需要的资源加起来并将其划分为可用的总数”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在决定线程池大小时,如何理解“将每个任务需要的资源加起来并将其划分为可用的总数”相关的知识,希望对你有一定的参考价值。

我正在研究Java Concurrency in Practice,第8.2章:调整线程池大小。

作者声称,通过将任务所需的所有资源的数量除以可用资源的数量,我们得到线程池大小的上限。

我没理解这一点。根据他的理论,如果我们的任务总共需要4GB内存,并且我们有8GB可用,那么线程池大小的上限将是0.5?

原段供参考:

当然,CPU周期不是您可能想要使用线程池管理的唯一资源。可能有助于调整大小限制的其他资源是内存,文件句柄,套接字句柄和数据库连接。计算这些类型资源的池大小约束更容易:只需将每个任务所需的资源量加起来,并将其除以可用总量。结果将是池大小的上限。

答案

你很接近,但你的等式基本上是倒置的。

假设我们有10 GB的可用内存,每个线程最多需要1 GB的内存。

没有任何方程式,我们可以推断出我们最多只能有10个线程,因为它将使用总共10 GB的内存。

我们可以用来计算这个的等式是:

              Total Quantity Available   10 GB
# Of Tasks =  ------------------------ = ----- = 10
                 Resources Per Task       1 GB

以上是关于在决定线程池大小时,如何理解“将每个任务需要的资源加起来并将其划分为可用的总数”的主要内容,如果未能解决你的问题,请参考以下文章

Day793.合理设置线程池大小 -Java 性能调优实战

07深入理解Java线程池

如何计算tomcat线程池大小?

如何修改weblogic默认线程池大小

自己实现一个简单的线程池

如何确定线程池的大小?