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

问题描述 投票:1回答:1

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

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

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

原段供参考:

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

java concurrency
1个回答
1
投票

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

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

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

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

              Total Quantity Available   10 GB
# Of Tasks =  ------------------------ = ----- = 10
                 Resources Per Task       1 GB
© www.soinside.com 2019 - 2024. All rights reserved.