在单核CPU下,有必要存在多线程吗?

  1. 我们使用一个例子来说明问题,在单核CPU的情况下,存在4个需要执行任务,有如下两种情况运行方式:

    1. 使用多线程执行这些任务,会发生线程上下文切换
    2. 一个一个任务按顺序执行完成
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BJJ5aJx4-1614605877111)(C:\Users\jin\AppData\Roaming\Typora\typora-user-images\1614603218249.png)]
  2. 上述两种情况,到底那个执行效率会快呢?

    分析:第一种情况明显发生很多次线程的上下文切换,我们知道线程的上下文切换是很消耗性能的,而第二种情况发生的则是一个任务完成再执行下一个任务,基本没线程切换,那么讲道理,难道是第二种情况下更加快了,那么就抛出个问题在单核CPU下,有必要存在多线程吗?

  3. 我们需要清楚的认识到:多线程会提高效率到底指的是什么?实际上,多线程会提高效率是跟I/O操作相关的。I/O操作又有磁盘IO,网络IO。

  4. 以磁盘IO来说,实际上当CPU需要磁盘中某些文件的时候,并不是直接CPU向磁盘IO要数据,而是交给DMA来完成磁盘io的数据读取,执行如下操作:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u11ovfbx-1614605877119)(C:\Users\jin\AppData\Roaming\Typora\typora-user-images\1614602959544.png)]

    1. 从上图我们就可以发现CPU在将指令告诉DMA的时候就处于空闲状态了。

    2. 如果磁盘IO读取的数据较大,则会长时间停留在第三步中。

    3. 那么CPU空闲下来的时间,为啥我们不好好利用起来呢

      因此就出现了多线程,当一个任务被执行到第三步 磁盘将内容加载到内存中的时候且执行时间巨长,CPU则空闲的,那么我们就切换线程,让它执行其他的任务,整体就提高的任务完成的效率。

    4. 这也是经常听到这句话的原因:IO操作不需要占用CPU

    在这里插入图片描述

  5. 另一个小原因:为了防止一个任务一直占据CPU。当任务1时间特别长,则一直使用CPU的话,那么其他任务就会被无法执行,为了防止这现象出现,任务之间的切换很有必要。

  • 36
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值