线程池核心参数设置规则
线程池的核心参数:
- corePoolSize: 核心线程数
- maximumPoolSize: 最大线程数
- keepAliveTime: 非核心线程存活时间
- workQueue: 任务队列
CPU 密集型任务
CPU 密集型任务的特点是任务的绝大部分时间花费在 CPU 的计算上,如压缩、音频处理、复杂计算等。
设置原则:
- corePoolSize=CPU 核数,maximumPoolSize=CPU 核数
- 过多的线程只会引起上下文切换,反而降低性能
- keepAliveTime 一般设置为 30s,对 CPU 密集型任务影响不大,因为线程池核心数量和最大数量一样
IO 密集型任务
特点:
- 大部分时间在等待 IO
- CPU 计算占比很低
设置原则:
- 线程数应该远大于 CPU 核心数,以便在某些线程阻塞等待的时候,其他现成可以继续使用 CPU
- corePoolSize 为 2 倍 CPU 核数,maximumPoolSize 为 CPU 核数的 2-10 倍,根据具体压测结果而定
- keepAliveTime 一般设置为 60s