Java线程池之如何合理配置核心线程数?

目标:最大限度利用cpu核数,不让cpu闲着

CPU 密集型任务CPU核心数+1

理解:cpu很忙,那就根据机器核数分配一核一个线程,不额外增加工作量。

比如一个8核的CPU,就需要分配8个线程,

但是跟人干活一样,一个核执行完一个线程,还有一些额外的准备工作,并不能很快切入到下一个线程,所以需要比系统核数多增加一个等待的线程,提前完成准备工作,设置9个。

IO 密集型任务CPU核心数 * (1+IO耗时/CPU耗时)

理解:io密集会占有线程等待任务执行完毕,此时cpu核可以闲下来执行一些别的线程,来提高利用率,所以需要设置的线程数比cpu核数多。

以一个核为例,io执行时间为3ms,cpu耗时为1ms,这时候cpu执行完3个线程为3ms,第一个io的线程正好执行完,可以接着进入下一次任务,所以使用IO耗时/CPU耗时=3,

去掉一些额外准备工作需要加1线程,

最后考虑多核的情况,cpu核数是多少就需要乘以几核。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值