首先在回答这个问题前要明白几个概念:

①:什么是线程上下文切换

②:什么是CPU时间片

明白这两个概念后,我们再说答案(能/不能)

一,如果是CPU密集型作业------不能

假设一段耗时总共为10s的代码(不涉及io操作),使用单线程执行,只需要10s的时间,当使用多线程执行时,就会涉及到线程的上下文切换,这时耗时肯定会超过10s的,所以这种情况下不能提高效率。

二,如果是IO密集型的作业----能

同理,一段代码(线程使用CPU执行2s的运算,然后执行3秒的io操作,接下来重复这个操作一次)总耗时10s,其中io操作就会占用6s的时间。

使用单线程执行时,串行执行总耗时为10s。

现在使用2个线程执行,当线程一执行2s的CPU运算时,线程二也会获得CPU的时间片进行运算。也就是两个线程会并行执行,当然,因为是单核CPU,所以每个线程2s的运算时间是肯定的,执行完CPU的运算的时间(2*2)是需要4s的,假设线程上下文切换的时间为0.5s,然后每个线程等待io操作的时间是一样的(3s),那么执行完这段代码的所需时间(4s+0.5s+3s)也就是7.5秒。这种情况下多线程肯定是能提高效率的。

当然,IO操作执行的时间越长,使用多线程就越有效。

单核CPU使用多线程能否提高效率?相关推荐

  1. 单核CPU处理多线程

    1.(单核CPU)同一时间,cpu只能处理1个线程,只有1个线程在执行 2.多线程同时执行:是CPU快速的在多个线程之间的切换 3.cpu调度线程的时间足够快,就造成了多线程的"同时&quo ...

  2. 使用多线程一定提高效率吗?

    多线程 执行 需要同时执行 不一定,需要了解cpu调度的算法 就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再 ...

  3. Java面试题:单核CPU支持多线程吗?

    答案:支持,CPU通过给每个线程分配CPU时间片(时间单元)来实现这个机制.由于CPU频率很高,故时间单元非常短,用户不易察觉.

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

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

  5. 单核cpu多线程有必要吗?

    通常一个任务不光 cpu 上要花时间, io 上也要花时间(例如去数据库查数据,去抓网页,读写文件等). 一个进程在等 io 的时候, cpu 是闲置的,另一个进程正好可以利用 cpu 进行计算. 多 ...

  6. 通过多线程压缩提高生成 Zip 文件的效率

    在很多情况下,需要用 Zip 格式保存数据文档.当数据量较大时(超过100M),就会明显感觉到保存文件耗时很长(超过10秒),这样的用户体验难以接受,想要优化. 现有开源方案 zlib-ng/zlib ...

  7. 单核CPU仍然存在线程安全问题

    Java内存模型是什么?           引用大师的一句话:"The Java Memory Model describes what behaviors are legal in mu ...

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

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

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

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

  10. JAVA多线程,真的能提高效率吗

    举个栗子 比如挖一个隧道,有2种开工方法 1.只在山的一头挖,直至挖到山的另一头,从而打通隧道,这可以看成是单线程 2.在山的两头挖,同时开工,最后在山的中间接通,从而打通隧道,这感觉肯定比1快了很多 ...

最新文章

  1. Hibernate 关联 set 和 list 对比
  2. linux etc 漏洞利用,漏洞利用 | 看我如何利用Kerberos EoP渗透你的Linux系统
  3. td不允许自己扩展_V神原文详解:通过及时性检测器(TD)解决区块链的51%攻击问题...
  4. 类string的构造函数、拷贝构造函数和析构函数
  5. 简约好看的响应式app下载页面源码
  6. 实验四android开发基础
  7. 小乌龟SVN安装和使用
  8. 裴礼文《数学分析中的典型问题与方法》 P1~31
  9. 分布式系统的概念、特点及常见方案
  10. Java代码审计详解
  11. Acme CAD Converter 8.9.8.1480 汉化破解版本
  12. Android - 浅谈 Handler 机制
  13. JavaScript - 屏蔽鼠标右键菜单
  14. 从1到2000个微服务,史上最落地的实践云原生25个步骤
  15. 如何去利用MindManager 2020绘制逻辑思维导图呢?
  16. Day_03——MySQL数据库查询语句练习
  17. 2020年小米校招JAVA岗笔试第二题
  18. JAVA 技术方向赏金任务-快递 E 栈训练任务
  19. springboot基于spring的宽带管理系统以及实现毕业设计源码250910
  20. 【招聘·杭州】长亭科技-golang 研发工程师

热门文章

  1. JMeter 请求报Response code:415错误
  2. qq互联代码 php,请教QQ互联的代码是如何写的?
  3. 用Python模拟高尔顿钉板实验
  4. matlab如何按行查找重复值?
  5. centos 删除服务器文件夹,centos彻底删除文件夹、文件命令
  6. 互联网日报 | 前11月全国网购超10万亿元;B站8月月活首次突破2亿;华为Mate40标准版开启预售...
  7. 人脸识别活体检测的几种方法
  8. CAN 接收邮箱 掩码设置
  9. EXCEL函数LookUp, VLOOKUP,HLOOKUP应用详解(含中文参数解释)
  10. mysql grant教程_MySQL的Grant命令详解