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