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

    1. 使用多线程执行这些任务,会发生线程上下文切换
    2. 一个一个任务按顺序执行完成
  2. 上述两种情况,到底那个执行效率会快呢?

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

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

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

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

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

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

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

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

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

在单核CPU下,有必要存在多线程吗?相关推荐

  1. 多核CPU,单核CPU,超线程技术,与多线程程序深入浅出

    CPU核心单元组 他只是CPU的一部分,不能称为CPU,它负责逻辑运算,是最重要的一部分. CPU CPU是CPU核心单元组(逻辑处理单元),时钟电路,高速缓存器等等组合的一个整体,其中CPU核心单元 ...

  2. java单核cpu飙高考死_java多线程在单核CPU上,还是需要volatile synchronized吗?

    本来不想回答的,可是看了这么多答案,有的不是特别靠谱.斗胆写个粗略的回答. 首先,JMM是不区分是否JVM到底是运行在单核处理器.单核超线程处理器.多核处理器,抑或是多核超线程处理器上的.就是说,Ja ...

  3. python单核运行_python下多核,单核CPU对于并行,并发执行效率的对比-Go语言中文社区...

    ** ** 这篇博客主要内容为python 中多线程以及多进程的效率对比,以及记录自己在做这个实验中遇到的一些问题以及心得 背景引入: CPU制造商为了追求CPU效率放弃了在CPU频率上的追求(CPU ...

  4. 测试单核cpu和多核cpu执行java多线程任务的效率

    这篇文章就是验证一件事: 只有多核cpu的计算机执行多个线程时才会提高效率(并行),单核cpu执行多个线程不会提高效率(并发). 我选择的任务是:冒泡排序长度30000的int数组 单线程下 我们先测 ...

  5. 单核CPU是否有线程可见性问题?

    本文仅是本人对问题的思考记录,并没有实操验证,有误请大家评论指出. 今天见到了一个经典的问题,单核CPU是否有线程可见性问题,学完操作系统应该可以直接回答,不会有线程安全问题.但如果结合JVM虚拟机来 ...

  6. 单核CPU, 1G内存,也能做JVM调优吗?

    最近,笔者的技术群里有人问了一个有趣的技术话题:单核CPU, 1G内存的超低配机器,怎么做JVM调优? 这实际上是两个问题.单核CPU的超低配机器,怎么充分利用CPU?单核CPU, 1G内存的超低配机 ...

  7. 多线程在单核cpu与多核cpu下如何工作

    1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢) 多个cpu的话就可以在两个cpu中同时执行了 ...

  8. 多线程与单核cpu,多核cpu概念

    1.多线程在单核和多核CPU上的执行效率问题的讨论  a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢)  多个cpu的话就可以在两个cpu中同时执 ...

  9. 对多线程程序,单核cpu与多核cpu如何工作相关的探讨

    对多线程程序,单核cpu与多核cpu如何工作相关的探讨 我们程序员在编码的时候,涉及到技术方案时,往往会忽略掉代码对性能方面的影响,或者没有足够的敏感度来帮助自己判断自己的技术方案对系统性能造成的影响 ...

最新文章

  1. greendao3出现 Error:Execution failed for task ':app:greendao'
  2. LigerUI编辑表格组件单元格校验问题
  3. 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作
  4. 请问.NET如何实现分布式系统?
  5. linux文件IO——文件IO介绍
  6. Linux无网络升级gcc,Linux离线(手动)升级GCC
  7. 集成电路模拟版图入门-版图基础学习笔记(四)
  8. 南邮JAVA程序设计实验3 流处理程序设计
  9. 非线性光纤光学_《Nature》子刊:解决大纵横比光纤中传质不匀的难题!
  10. 光孝寺招聘员工!月薪15000,早九晚五,免费饭菜,有证者优先,工作六根清净,而且.......
  11. Xshell v6 Build 0193 绿色特别版及全套产品
  12. xilinx PCIe PIO工程仿真及验证
  13. 我的ubuntu系统配置-重装到完整配置ubuntu环境-完整配置ubuntu-ubuntu-install-final
  14. sumifs函数的使用方法,sumifs函数的多条件运用
  15. 华为p4支持鸿蒙功能吗_华为鸿蒙系统支持哪些手机 鸿蒙系统支持以前的华为手机吗...
  16. 调用微信红包接口返回(转)
  17. i3 10100f和i5 10400f 哪个好
  18. 2020年精彩文章回顾
  19. linux 板卡驱动开源项目Comedi使用编译流程
  20. Fastreport.Net用户手册:打印Bands

热门文章

  1. css-富文本编辑显示
  2. ARM与RISC-V架构有哪些区别?
  3. IDEA翻译插件出现报错: 更新 TKK 失败,请检查网络连接解决
  4. c语言乘法运算出负数,C语言用数组表示大数 乘法得出的结果怎么是负数之类的奇怪数字?...
  5. 网站自动回复客服源码
  6. Go语言基本语法 (下)
  7. lerna 项目中集成 babel lint-staged husky eslint
  8. 基于C/C++语言的停车场管理系统编程课程设计超详细
  9. 如何安装ssl证书?
  10. 行业集中度(Concentration Ratio)