【线程池下篇】IO密集型 VS CPU密集型

先来思考一个问题,线程数量是不是越多越好,我们都知道线程的出现是为了帮忙干活,就像生活中你找人帮你干活你得给人家开工钱,那肯定不是越多越好,计算机中,线程的创建同样需要本钱;不是越多越好,那应该怎么设计呢?
根据需求来,看你的需求是怎样的;

第一种情况:cpu密集型

如果你的程序是以计算为主,多线程在运行的时候,可以充分利用CPU,假设你有五个核心cpu,当你有五个线程时,此时一人一个,资源得到了最大效率的利用,如果你有五个CPU,10个线程,这样,运行线程的创建过程和运行的切换过程都需要浪费资源,就得不偿失了
结论在CPU密集型中,线程数=cpu数最合适,
适合场景:运算较多、业务逻辑较复杂

第二种情况:IO密集型

计算较少CPU 使用率较低,是一个磁盘或网络为主的程序,,程序中会存在大量的 I/O 操作占用时间,导致线程空余时间很多,如果你只有一个线程,这个线程在IO等待状态,就没有线程可用了,所以上面的那种一对一就不合适了,一个等待一个在cpu里面运行,这时cpu也没空着,线程还都用上了,
结论:CPU核心数×2=线程数。当线程进行 I/O 操作 CPU 空闲时,启用其他线程继续使用 CPU,以提高 CPU 的使用率。

线程等待时间所占比例越高,需要的线程数越多(因为其他线程继续使用CPU,CPU的利用率就提高了),反之则反

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值