Java:如何选择线程池的核心线程数

Java:简述线程池的工作原理

程序开多少线程合适?需要考虑程序是CDP密集型,还是I/O密集型。

一、CPU密集型程序

一个完整请求,I/O操作可以在很短时间内完成,CPU还有很多运算要处理,也就是说 CPU计算的比例占很大一部分,线程等待时间接近0。

1、单核CPU

单核CPU处理CPU密集型程序,这种情况并不太适合使用多线程。

2、多核CPU

如果是多核CPU处理CPU密集型程序,我们完全可以最大化的利用CPU核心数,应用并发编程来提高效率。CPU 密集型程序的最佳线程数就是:理论上线程数量 = CPU 核数(逻辑)。

但是实际上,数量一般会设置为 CPU 核数(逻辑)+ 1(经验值)。计算(CPU)密集型的线程恰好在某时因为发生一个页错误或者因其他原因而暂停,刚好有一个“额外”的线程,可以确保在这种情况下CPU周期不会中断工作。

二、 I/O 密集型程序

与 CPU 密集型程序相对,一个完整请求,CPU运算操作完成之后还有很多 I/O操作要做,也就是说 I/O 操作占比很大部分,等待时间较长。线程等待时间所占比例越高,需要越多线程;线程CPU时间所占比例越高,需要越少线程。

I/O 密集型程序的最佳线程数就是: 最佳线程数 = CPU核心数 (1/CPU利用率) = CPU核心数 (1+ ( I/O耗时 / CPU耗时))。

如果几乎全是 I/O耗时,那么CPU耗时就无限趋近于0,所以纯理论你就可以说是2N(N=CPU核数),一般我们说 2N + 1就即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小二(海阔天空)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值