《Java并发编程的艺术》——线程池的线程数怎么设置比较好

首先要区分线程池执行的任务是CPU密集型任务,还是IO密集型任务

线程池的最大线程数

  • CPU密集型任务指的是硬盘、内存性能比CPU可能好的多,所以系统大部分计算时间都用在CPU上,按照这样的说法,CPU密集型任务也需要很多的线程完成,但是线程越多,花在线程上下文切换的时间也就更多,所以我们不能过多的设置线程,应充分发挥CPU性能。一般对于CPU密集型任务,线程池的最大线程数设置为CPU可用核心数+1或者就是CPU可用核心数。CPU可用核心线程数可通过Runtime.getRuntime().availableProcessors()获得
  • IO密集型任务指的是CPU性能比较好,所以系统大部分时间都花在IO上,CPU资源消耗很少,所以对于IO密集型任务来说,我们可以设置更多的线程,充分利用CPU。一般对于IO密集型任务,线程池的最大线程数设置为2 * CPU可用核心数

线程池的核心线程数

对于核心线程数来说,可以用过一个公式来设置:核心线程数 = CPU可用核心数 / (1 - 阻塞系数),其中阻塞系数∈(0, 1)。CPU密集型任务的阻塞系数接近0,IO密集型任务的阻塞系统接近1
阻塞系数要采用性能分析工具确定IO密集型任务消耗时间与CPU密集型任务消耗时间的比值来确定,或者通过经验来设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值