当前位置: 首页 > news >正文

并发 并行 同步 异步 多线程的区别

1. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥
2. 互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。
3. 同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。
其中并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并发是指多核处理器的并发。
4. 并行:在单处理器中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特种;在多处理器系统中,进程不仅可以交替执行,而且可以重叠执行。在多处理器上的程序才可实现并行处理。从而可知,并行是针对多处理器而言的。并行是同时发生的多个并发事件,具有并发的含义,但并发不一定并行,也亦是说并发事件之间不一定要同一时刻发生。

5. 多线程:多线程是程序设计的逻辑层概念,它是进程中并发运行的一段代码。多线程可以实现线程间的切换执行。

6. 异步:异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。
   异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。


为了对以上概念的更好理解举一个简单例子,  假设我要做 烧开水,举杠铃100下, 洗衣服 3件事情。

烧开水 这件事情,  我要做的事情为, 准备烧开水 1分钟, 等开水烧开 8 分钟 , 关掉烧水机 1分钟
举杠铃100下        我要做的事情为,  举杠铃100下  10分钟
洗衣服            我要做的事情为, 准备洗衣服 1分钟, 等开水烧开 5 分钟 , 关掉洗衣机 1分钟

单核情况下
同步的完成,我需要做的时间为 1+ 8 +1 + 10 + 1+ 5 +1 = 27 分

如果异步,就是在等的时候,我可以切换去做别的事情

准备烧开水(1) + 准备洗衣服(1) + 举50下杠铃 (5)分钟+ 关洗衣机 1分钟 + 举杠铃20下 (2)分钟+ 关烧水机 1分钟 + 举30下杠铃(3)分钟
1+1+5+1+2+1+3 =14 分钟


双核 异步 并行

核1  准备烧开水 1分钟+ 举杠铃50下(5)分钟+ 等待3分钟 + 关掉烧水机 1分钟

核2  准备洗衣服 1分钟+ 举杠铃50下(5)分钟+ 关掉洗衣机 1分钟 + 等待3分钟

其实只花了 1+5+3+1 = 10分钟

其中还有双核都等待了3分钟

双核 异步 非并行

核1  举杠铃100下(10)分钟

核2  准备烧开水 1分钟+ 准备洗衣服 1分钟+ 等待5 分钟+ + 关掉烧水机 1分钟  + 等待 1 分钟 + 关掉洗衣机 1分钟

其实只花了 1+5+3+1 = 10分钟

多线程的做法
单核下

线程1  准备烧开水 1分钟, 等开水烧开 8 分钟 , 关掉烧水机 1分钟
线程2  举杠铃100下  10分钟
线程3  准备洗衣服 1分钟, 等开水烧开 5 分钟 , 关掉洗衣机 1分钟

cpu 可能这么切换 最理想的切换方式

线程1  准备烧开水1  sleep  1          sleep 5            sleep 1          sleep 2          关开水 1分钟 exit
线程2    sleep 1      sleep  1            举杠铃50 5分钟    sleep 1          举杠铃20 2分钟  sleep1      举杠铃30下 3分钟      
线程3    sleep  1      准备洗衣服1 分钟    sleep 5            关洗衣机1分钟    exit

最后使用了  14分钟  和异步是一样的。
但是实际上是不一样的,因为线程不会按照我们设想的去跑, 如果线程2 举杠铃先跑,整个流程的速度就下来了。

异步和同步的区别,  在io等待的时候,同步不会切走,浪费了时间。

如果都是独占cpu 的业务, 比如举杠铃的业务, 在单核情况下 多线和单线 没有区别。

多线程的好处,比较容易的实现了 异步切换的思想, 因为异步的程序很难写的。多线程本身程还是以同步完成,但是应该说
比效率是比不上异步的。 而且多线很容易写, 相对效率也高。

多核的好处,就是可以同时做事情, 这个和单核完全不一样的。

 

异步效率高的本质是:不让cpu能力浪费在等待上。

转载于:https://www.cnblogs.com/520wife/p/6183907.html

相关文章:

  • web服务器内置对象,或者说是ServletAPI的实例
  • 2016年NK冬季训练赛 民间题解
  • Tips
  • ratina 视网膜屏幕解决方案大全
  • rtmp拉流测试工具
  • cmd中java -jar *.jar 提示Unable to access jarfile *.jar或Windows不能用鼠标双击运行jar文件怎么办解决方案...
  • gulp同步执行任务
  • HBase内置过滤器的一些总结
  • 【VBA编程】09.使用Excle集合对象
  • 树莓派上Java程序作为linux服务并开机自动启动
  • tracert与pathping
  • 线程池及并发编程基础总结
  • Ztree当节点没有下级时不显示下拉图标
  • Bootstrap表单验证插件bootstrapValidator使用方法整理
  • 寻找多数元素问题
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [数据结构]链表的实现在PHP中
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • fetch 从初识到应用
  • Netty 4.1 源代码学习:线程模型
  • Phpstorm怎样批量删除空行?
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 那些年我们用过的显示性能指标
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 提醒我喝水chrome插件开发指南
  • 微服务入门【系列视频课程】
  • 用mpvue开发微信小程序
  • UI设计初学者应该如何入门?
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​卜东波研究员:高观点下的少儿计算思维
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #git 撤消对文件的更改
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)球球大作战
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转) 深度模型优化性能 调参
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .gitignore文件---让git自动忽略指定文件
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .Net MVC4 上传大文件,并保存表单
  • .NET MVC之AOP
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET的数据绑定
  • .net连接MySQL的方法
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • @31省区市高考时间表来了,祝考试成功
  • @Transactional 详解
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ C++ ] 继承