Java 如何理解;将每项任务所需的资源加起来,并将其划分为可用的总数量;在决定线程池大小时

Java 如何理解;将每项任务所需的资源加起来,并将其划分为可用的总数量;在决定线程池大小时,java,concurrency,Java,Concurrency,我正在研究Java并发实践,第8.2章:调整线程池大小 作者声称,通过将任务所需的所有资源的数量除以可用资源的数量,我们可以得到线程池大小的上限 我不明白这一点。根据他的理论,如果我们的任务总共需要4GB内存,并且我们有8GB可用内存,那么线程池大小的上限将是0.5 原文供参考: 当然,CPU周期不是您可能希望使用线程池管理的唯一资源。其他可以 内存、文件句柄、套接字句柄和数据库连接是影响大小限制的因素。计算池 这些类型的资源的大小限制更容易:只需将每个任务需要的资源量加起来,然后 将其分为可用

我正在研究Java并发实践,第8.2章:调整线程池大小

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

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

原文供参考:

当然,CPU周期不是您可能希望使用线程池管理的唯一资源。其他可以 内存、文件句柄、套接字句柄和数据库连接是影响大小限制的因素。计算池 这些类型的资源的大小限制更容易:只需将每个任务需要的资源量加起来,然后 将其分为可用总量。结果将是池大小的上限


你们很接近,但你们的方程基本上是颠倒的

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

如果没有任何公式,我们可以推断我们最多只能有10个线程,因为这将使用总共10GB的内存

我们可以用来计算的方程式是:

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

如果我们的任务总共需要4GB vs加起来每个任务需要多少资源,那么如果每个任务需要1GB内存,那么上限应该是
8
,所以语句实际上应该是“只计算每个任务需要的最大资源量,并将其除以可用的总量”?。。。