线程池的线程数配置策略
目录
1. CPU密集型任务
2. IO密集型任务
3. 混合型任务
1. CPU密集型任务
-
特点:任务主要消耗CPU资源(如计算、加密、压缩)。
-
推荐线程数:
-
线程数 ≈ 物理核心数 + 1 / CPU - 1(不知道哪个√)
-
例如,4核CPU建议配置5个线程。
-
-
原理:
-
避免过多的线程导致频繁的上下文切换(Context Switching),浪费CPU时间。
-
额外+1是为了在某个线程因页错误(Page Fault)等阻塞时,仍能保持CPU满载。
-
2. IO密集型任务
-
特点:任务涉及网络请求(数据库操作)、文件读写,等长时间等待操作,CPU空闲。
-
推荐线程数:
-
线程数 ≈ 2 × 逻辑核心数
-
例如,4核8线程的CPU建议配置16个线程。
-
-
原理:
-
最大化利用CPU在等待IO时的空闲时间,允许更多线程并发执行。
-
可通过公式计算:
线程数 = CPU逻辑核心数 × (1 + 平均IO等待时间 / CPU计算时间)
例如,若IO等待时间占50%,则线程数 ≈ 逻辑核心数 × (1 + 0.5) = 12(8核为例)。
-
3. 混合型任务
-
特点:同时包含CPU计算和IO操作。
-
推荐策略:
-
将任务拆分为CPU和IO两部分,分别使用不同的线程池(如
ForkJoinPool
处理计算,CachedThreadPool
处理IO)。
-