一、线程池大小设置的目的是什么
-
提高
CPU
的利用率 -
提高
CPU
的利用率 -
提高
CPU
的利用率
二、线程池核心线程数设置的依据
-
计算密集型业务场景
-
计算密集型是指处理这种任务时,线程不会发生阻塞,线程不阻塞就一定程度代表
CPU
一直在忙碌 -
对于计算密集型的任务,在有
N
个处理器的系统上,当线程池的大小为N+1
时,能实现CPU
的最优利用率。(即使当计算密集型的线程 偶尔由于代码缺陷故障或者其他原因暂停时,这个额外
的线程也能确保CPU
的时装周期不会被浪费。)
-
-
I/O
密集型业务场景-
I/O
密集型是指运行该类任务时线程多会发生阻塞,一旦阻塞,CPU
就多被闲置,浪费CPU
资源 -
对于
I/O
操作或其它阻塞任务,由于线程并不会一直执行,因此线程池的规模应该更大
-
三、线程池核心线程数的计算公式
-
计算密集型
单个线程池 =
CPU
核数 + 1多个线程池 =
CPU
核数 / 线程池个数 -
I/O
密集型单个线程池 =
CPU
核数的两倍多个线程池 = 多个线程池核心线程数之和 =
CPU
核数的两倍
P.S
这些设置没有绝对的正确性,需要根据业务场景去测试和计算,生产环境可以设置得保守一些