通常一个任务不光 cpu 上要花时间, io 上也要花时间(例如去数据库查数据,去抓网页,读写文件等)。 一个进程在等 io 的时候, cpu 是闲置的,另一个进程正好可以利用 cpu 进行计算。 多几个进程一起跑,可以把 io 和 cpu 都跑满了。
现在一般都是虚拟资源,资源有弹缩机制,所以一般该跑多线程的时候就可以跑多线程。

单核cpu多线程有必要吗?

问题分析#

现代计算机一般都是多核cpu,多线程的可以大大提高效率,但是可能会有疑问,那单核CPU使用多线程是不是没有必要了,假定一种情况,web应用服务器,单核CPU、单线程,用户发过来请求,单个线程处理,CPU等待这个线程的处理结果返回,查询数据库,CPU等待查询结果...,只有一个线程的话,每次线程在处理的过程中CPU都有大量的空闲等待时间,那这样来说并行和串行似乎并没有体现并行的优势,因为任务的总量在那里,实际情况肯定不是这样的,即便是单核CPU,一个进程中往往也是有多个线程存在的,每个线程各司其职,CPU来调度各线程。

这里需要区分CPU处理指令和IO读取的不同,CPU的执行速度要远大于IO的过程,因此在大多数情况下多一些复杂的CPU计算都比增加一次IO要快,这一块深入理解要学习计算机原理相关的知识。

现实生活中也是有很多类似的例子,比如厨师做一道菜,买菜和买配料需要去不同的两个商店,如果这个过程只依靠他一个人来做,那耗费的总时间就是买菜再去买调料的总时间,如果有一个帮厨,那么就可以兵分两路,再来汇总结果,时间基本可以减半,厨师和帮厨就是不同的线程。

总结#

结果符合预期,这也说明在有频繁的IO操作时使用多线程会大大提高程序的执行效率。
有兴趣的同学可以试一下在执行i++的情况下,多线程就一定快吗?单线程和多线程的临界值是什么?

附:

  • 为什么Redis单线程却很快,在没有磁盘IO的情况下单核CPU绑定一块内存效率最高,Redis把读写操作都放在了CPU和内存的部分,又减少了多线程上下文 切换的过程,因此Redis即便是单线程也很快,在现代多核CPU的服务器中,往往会通过根据绑定Redis进程和CPU提高性能。
  • 《性能调优攻略》在多核CPU调优章节提到,我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程和一堆别的进程挤在一起。在文章中提到了Linux下的一个工具,taskset,可以设定单个进程运行的CPU。

单核cpu多线程有必要吗?相关推荐

  1. 单核CPU,多线程与性能

    单核CPU,多线程与性能   问题概述 单核CPU的计算机上, 多线程能够提高程序运行的性能吗? 这个问题看起来简单,实际很复杂,设计到多方面的因素. 首先我们要把概念搞清楚, 那就是什么是性能? 一 ...

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

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

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

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

  4. 单核CPU如何执行多线程

    概述 在多处理器系统中,多个线程在不同的内核上同时执行. 例如,如果有两个线程和两个内核,则每个线程将在单个内核上运行.在单处理器系统中,多个线程执行一个接一个的执行,或者等到一个线程完成或被操作系统 ...

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

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

  6. 单核CPU与多核CPU的区别,多线程的优点,什么是并行?并发?

    单核cpu:是一种假的多线程,因为在一段时间内只能执行一个线程的任务.但是由于cpu执行时间特别短,所以感觉不出来 多核cpu可以更好的发挥多线程的效率 一个java应用程序java.exe,其实至少 ...

  7. 单核cpu多核cpu如何执行多线程

    花了很多时间来整理这方面的相关内容,参考博客:多CPU,多核,多进程,多线程 程序和进程 程序: 为完成特定任务,用某种语言编写的一组指令集合,即一段静态的代码 进程: 是程序的一次执行过程,或是正在 ...

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

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

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

    我们使用一个例子来说明问题,在单核CPU的情况下,存在4个需要执行任务,有如下两种情况运行方式: 使用多线程执行这些任务,会发生线程上下文切换. 一个一个任务按顺序执行完成. 上述两种情况,到底那个执 ...

最新文章

  1. 云计算集成过程中七个关键性的问题
  2. 【 Vivado 】UCF到XDC之间的转换
  3. ZOJ-2571 Big String Outspread 模拟
  4. oracle 10g体系结构及安全管理
  5. 利用Serverless Kubernetes和Kaniko快速自动化构建容器镜像
  6. 380免费云存储_从四个方面分析:云存储服务的特点、影响
  7. java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...
  8. 倍福TwinCAT 3 气缸动作程序编写
  9. 《Adobe Photoshop CS6中文版经典教程(彩色版)》目录—导读
  10. 电子管功放制作指南_电子管功率放大器的简易设计
  11. 计算机小学生二年级知识,小学二年级语文知识点之拼音技巧
  12. shell脚本之批量删除文件
  13. GeForce Experience界面重叠解决办法
  14. 斗争程序猿(四十一)——历史朝代大学(五岁以下儿童)——我的娱乐
  15. Hadoop精华问答 | 如何设置单个任务占用的内存量和CPU数目?
  16. 代理模式(Proxy Design Pattern)及代码实现
  17. Wifi信号强弱判断
  18. javafx vbox 居中_JavaFX VBox调整大小
  19. python笔记:sklearn r2_score和explained_variance_score的本质区别是什么?
  20. 分享古典唯美水墨梅商务汇报PPT模板

热门文章

  1. 程序员显示器怎么设置成竖屏
  2. 6 和 9 组成的最大数字
  3. 【bioinfo】sam文件可选区域字段(Optional Feild)含义
  4. VF控制和矢量控制的一些区别
  5. nlp自然语言处理_nlp满足可持续投资
  6. 设备使用python连接阿里Iot
  7. matlab程序中ode45,关于matlab中ode45的问题
  8. bochs上网镜像怎么上网_bochs win7镜像可上网版-bochs WIN7 IMG镜像文件下载 v1.0完整版...
  9. 卧槽,迅雷的代码结构被扒了精光
  10. 离散数学及其应用复盘 | 第3版第4章——谓词逻辑思维导图梳理(复习专用)