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

您所在的位置:网站首页 女孩生日占3多少有意义吗 在单核CPU下,有必要存在多线程吗?

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

2024-07-12 15:14| 来源: 网络整理| 查看: 265

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

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

上述两种情况,到底那个执行效率会快呢?

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

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

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

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

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

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

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

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

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

在这里插入图片描述

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3