我正在研究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