一、Java并发编程实战
仔细观察上面两个公式,其实是类似的,在CPU使用率达到100%时,其实结论是一致的,这时候计算线程的公式就变成了:
N
t
h
r
e
a
d
s
=
N
c
p
u
∗
100
%
∗
(
1
+
w
/
c
)
N_{threads}=N_{cpu}*100\%*(1+w/c)
Nthreads=Ncpu∗100%∗(1+w/c)
根据上面的公式,我们在实践应用中计算的公式就出来了,如下:
- 针对IO密集型的:阻塞耗时w一般都是计算耗时的几倍,假设阻塞耗时=计算耗时的情况下,
N
t
h
r
e
a
d
s
=
N
c
p
u
∗
(
1
+
1
)
=
2
N
c
p
u
N_{threads}=N_{cpu}*(1+1)=2N_{cpu}
- 对于计算密集型的,阻塞耗时趋于0,即w/c趋于0,公式
N
t
h
r
e
a
d
s
=
N
c
p
u
N_{threads}=N_{cpu}
注意上面只是做出的较为普适的线程数公式推算,实际应用中需要考虑多个方面,比如内容容量消耗,任务耗时等,可以对这个公式进行不断的场景调整适配。
参考:
参考文章