单核CPU使用多线程能否提高效率?
首先在回答这个问题前要明白几个概念:
①:什么是线程上下文切换
②:什么是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使用多线程能否提高效率?相关推荐
- 单核CPU处理多线程
1.(单核CPU)同一时间,cpu只能处理1个线程,只有1个线程在执行 2.多线程同时执行:是CPU快速的在多个线程之间的切换 3.cpu调度线程的时间足够快,就造成了多线程的"同时&quo ...
- 使用多线程一定提高效率吗?
多线程 执行 需要同时执行 不一定,需要了解cpu调度的算法 就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再 ...
- Java面试题:单核CPU支持多线程吗?
答案:支持,CPU通过给每个线程分配CPU时间片(时间单元)来实现这个机制.由于CPU频率很高,故时间单元非常短,用户不易察觉.
- 在单核CPU下,有必要存在多线程吗?
我们使用一个例子来说明问题,在单核CPU的情况下,存在4个需要执行任务,有如下两种情况运行方式: 使用多线程执行这些任务,会发生线程上下文切换. 一个一个任务按顺序执行完成. 上述两种情况,到底那个执 ...
- 单核cpu多线程有必要吗?
通常一个任务不光 cpu 上要花时间, io 上也要花时间(例如去数据库查数据,去抓网页,读写文件等). 一个进程在等 io 的时候, cpu 是闲置的,另一个进程正好可以利用 cpu 进行计算. 多 ...
- 通过多线程压缩提高生成 Zip 文件的效率
在很多情况下,需要用 Zip 格式保存数据文档.当数据量较大时(超过100M),就会明显感觉到保存文件耗时很长(超过10秒),这样的用户体验难以接受,想要优化. 现有开源方案 zlib-ng/zlib ...
- 单核CPU仍然存在线程安全问题
Java内存模型是什么? 引用大师的一句话:"The Java Memory Model describes what behaviors are legal in mu ...
- 测试单核cpu和多核cpu执行java多线程任务的效率
这篇文章就是验证一件事: 只有多核cpu的计算机执行多个线程时才会提高效率(并行),单核cpu执行多个线程不会提高效率(并发). 我选择的任务是:冒泡排序长度30000的int数组 单线程下 我们先测 ...
- 多线程与单核cpu,多核cpu概念
1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢) 多个cpu的话就可以在两个cpu中同时执 ...
- JAVA多线程,真的能提高效率吗
举个栗子 比如挖一个隧道,有2种开工方法 1.只在山的一头挖,直至挖到山的另一头,从而打通隧道,这可以看成是单线程 2.在山的两头挖,同时开工,最后在山的中间接通,从而打通隧道,这感觉肯定比1快了很多 ...
最新文章
- Hibernate 关联 set 和 list 对比
- linux etc 漏洞利用,漏洞利用 | 看我如何利用Kerberos EoP渗透你的Linux系统
- td不允许自己扩展_V神原文详解:通过及时性检测器(TD)解决区块链的51%攻击问题...
- 类string的构造函数、拷贝构造函数和析构函数
- 简约好看的响应式app下载页面源码
- 实验四android开发基础
- 小乌龟SVN安装和使用
- 裴礼文《数学分析中的典型问题与方法》 P1~31
- 分布式系统的概念、特点及常见方案
- Java代码审计详解
- Acme CAD Converter 8.9.8.1480 汉化破解版本
- Android - 浅谈 Handler 机制
- JavaScript - 屏蔽鼠标右键菜单
- 从1到2000个微服务,史上最落地的实践云原生25个步骤
- 如何去利用MindManager 2020绘制逻辑思维导图呢?
- Day_03——MySQL数据库查询语句练习
- 2020年小米校招JAVA岗笔试第二题
- JAVA 技术方向赏金任务-快递 E 栈训练任务
- springboot基于spring的宽带管理系统以及实现毕业设计源码250910
- 【招聘·杭州】长亭科技-golang 研发工程师
热门文章
- JMeter 请求报Response code:415错误
- qq互联代码 php,请教QQ互联的代码是如何写的?
- 用Python模拟高尔顿钉板实验
- matlab如何按行查找重复值?
- centos 删除服务器文件夹,centos彻底删除文件夹、文件命令
- 互联网日报 | 前11月全国网购超10万亿元;B站8月月活首次突破2亿;华为Mate40标准版开启预售...
- 人脸识别活体检测的几种方法
- CAN 接收邮箱 掩码设置
- EXCEL函数LookUp, VLOOKUP,HLOOKUP应用详解(含中文参数解释)
- mysql grant教程_MySQL的Grant命令详解