线程池的大小
如果线程池中的线程在执行任务时,密集计算所占的时间比重为
P
(
0
<
P
≤
1
)
P(0 < P \le 1)
P(0<P≤1),而系统一共有
C
C
C个CPU,为了让这
C
C
C个CPU跑满而又不过载,线程池大小的经验公式是
T
=
C
/
P
T = C/P
T=C/P。
T
T
T是个hint
,考虑到P值的估计不是很准确,
T
T
T的最佳值可以上下浮动50%。这个经验公式的原理很简单,
T
T
T个线程,每个线程占用
P
P
P的CPU时间,如果刚好占满
C
C
C个CPU,那么必有
T
∗
P
=
C
T * P = C
T∗P=C。
如果 P < 0.2 P < 0.2 P<0.2,这个公式就不适用了, T T T可以取一个固定值,比如 5 ∗ C 5*C 5∗C,另外,公式里的 C C C不一定是CPU总数,可以是“分配给这项任务的CPU数目”,比如在8核机器上分出4个核做一项任务,那么 C = 4 C = 4 C=4。