今天的这篇文章来自蜗牛学院在线教育部卿淳俊老师。

蜗牛学院资深讲师,15年测试开发及项目管理经验,认证敏捷项目Scrum Master,精通各种测试及开发工具、框架的设计和实现,在移动互联网、敏捷项目管理、电商测试等领域有丰富的项目经验。

对大数据、机器学习、区块链等新兴技术均有深入研究。6年讲师经验铸就了深入浅出的授课风格,秉持着“授人以鱼不如授人以渔”的理念,让学员达到“知其然更要知其所以然”,真正掌握技术的本质。

·  正  ·  文  ·  来  ·  啦  ·

在Python的协程和多线程等相关的编程中,我们经常都会遇到这样几个专业名词——并发、并行、同步、异步、阻塞和非阻塞,很多童鞋都对这几个词有一定程度上的误解和混淆,在本篇我们就来讲讲这几个概念究竟有什么区别。

1.并发和并行。

并发是指一个时间段内,有几个程序在同一个CPU上运行,但是任意时刻只有一个程序在CPU上运行。通俗讲就相当于是一个人交替做不同事情的能力,这里强调的是一个人来做。那为什么他要交替着做不同的事情呢?一般都是遇到有需要等待的事件,比如泡茶的时候,先把水烧上再去洗杯子、放茶叶。烧水是需要等待的(类似于IO这种耗时操作),在等待的时候我去做别的事(洗杯子、放茶叶),这就是并发。
并行是指任意时刻点上,有多个程序同时运行在多个CPU上,所以最大并行数跟CPU的核数相同。这里强调的是多个人同时做不同的事情。比如在同一时间内,张三看书、李四听歌、王五玩游戏,几个人在做不同的事,这就是并行。

2. 同步和异步。

同步和异步关注的是消息通信机制(synchronous communication/ asynchronous communication)。
同步是指代码调用IO操作时,必须等待IO操作完成才返回的调用方式。换句话说,就是由*调用者*主动等待这个*调用*的结果。要注意一点,这里说的IO操作并不仅仅是指狭义上的磁盘读写操作,而是泛指一切耗时操作,比如休眠、网络请求等,都属于IO操作这个范畴。

异步跟同步正好相反,指代码调用IO操作时,不必等待IO操作完成就返回的一种调用方式。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。
多线程就是一个典型的异步操作,比如通过线程池submit一个task之后,立即就会得到返回的一个future对象,后期我们就可以通过这个future对象去拿到异步操作的结果。
举个通俗的例子:你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。注意,异步总是跟回调这个行为绑定在一起。

3. 阻塞和非阻塞。

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态
阻塞是指调用函数的时候当前线程被挂起。
非阻塞是指调用函数的时候当前线程不会被挂起,而是立即返回。
还是上面的例子,

你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果,如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 当然你也要偶尔过几分钟check一下老板有没有返回结果。

在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。
总结一下,阻塞非阻塞关心的是调用方(你自己)的行为,同步异步关心的是被调用方(书店老板)的行为,看起来比较相似,其实是从不同的角度去描述这件事。

转载于:https://www.cnblogs.com/woniuxy/p/11507661.html

蜗牛学院卿老师:Python中几个比较容易混淆的概念解释相关推荐

  1. Python 中最黑魔法、最难懂的概念

    最近在看一个开源框架的源码,其中大量使用了 metaclass 方法.这个概念非常抽象,本文我就以一个有趣实例,用更简洁和通畅的方式来理解它. 元类 ( metaclass )应该是 Python 中 ...

  2. php中的pecl是什么,什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释

    什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释 概述 关于PEAR,PECL这两个东西,初学PHP的时候就知道,但是貌似用的人很少再加上以前也是在Windows下做开发,所以了解的不多 ...

  3. python中hist函数参数_用hist参数解释Python,python,解读

    python用hist参数解读 python 中绘制hist的方法有很多,我经常用的是matplotlib直接用x,y绘制:Dataframe直接.hist绘制: 绘制直方图 1.bins为80的图形 ...

  4. python中alpha是什么意思_图像处理术语解释:什么是PRGBA和Alpha预乘(Premultiplied Alpha )...

    Alpha预乘(Premultiplied Alpha)和PRGBA 一般来说四通道图像数据保存的都是ARGB或RGBA,其R.G.B值还没有进行任何透明化处理,但这种格式在图像合成时会存在两个问题: ...

  5. python中pyplot是什么意思_pyplot 入门概念小结

    pyplot 入门概念小结 知乎的markdown支持实在是太差了,我就不在这里一个一个代码显示样式了,详情看我在简书发的文章.也希望高手指点一下怎么在知乎里面用好Markdown.也可以移步我的微信 ...

  6. 解决python中html 代码被注释掉 依旧被解释导致报错ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx)

    ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx) 注释的是Html代码,是给浏览器看的. Html里的代码还是要执行.注释python代码用{# ...

  7. python中(start, end,step ) 解释range()函数 和 切片操作

    start (初始值默认为0) end(默认从初始值到该值减一) step(默认步数为1)  range函数转换成列表 例如:range(10)end表示范围(0-9),(start)初始值默认0,( ...

  8. Python中的strip().split(‘\t‘)的用法和解释

    目录 (一).strip()的用法 (二).split的用法 (三).strip().split()的用法 (一).strip()的用法 strip()主要是对字符串进行操作,主要是删除当前你得到的这 ...

  9. python中继承和多态

    继承和多态 继承 引入继承 我们有这样一个需求 模仿英雄联盟定义两个英雄类1.英雄要有昵称.攻击力.生命值属性2.实例化出两个英雄对象3.英雄之间可以互殴,被殴打的一方掉血,血量小于0则判断为死亡 那 ...

最新文章

  1. 共面阻抗对高频PCB 设计中传输线阻抗控制的影响
  2. CentOS 7 源码编译安装 PostgreSQL 11.2
  3. 植物微生物组培养与重组技术:从描述性研究走向功能性研究
  4. Windows2003 IIS安装
  5. 设计模式C++实现(15)——观察者模式
  6. his系统存储服务器,关于HIS服务器及存储建设的前瞻性需求报告
  7. java游戏+弹幕_JAVA 弹幕小游戏 1.0版本
  8. curl 慢 不稳定_Node.js VM 不完全指北
  9. 20179311《网络攻防实践》第一周作业
  10. 400分理科学计算机,理科400分,专科批次,有4所211大学可以报考
  11. 《C#与.net高级编程》——第一支柱:C#的封装
  12. 今天开始学OpenWRT - 21/03/8
  13. 默纳克系统服务器怎么看抱闸,默纳克抱闸制动力检测怎么关闭
  14. oracle代码连接,Oracle连接核心知识点
  15. application/x-www-form-urlencoded接口响应报文中文乱码
  16. python类方法和实例方法syntax errors_python新手常犯的17个错误
  17. 基于matlab计算机视觉的葡萄检测分级系统
  18. 计算机更改后怎么找不到桌面文件,电脑桌面的文件不见了怎么找回
  19. 数商云营销渠道管理系统解决方案:企业级营销系统类型、定位、管理
  20. 阿里云(飞天)里的 盘古

热门文章

  1. 智能红外遥控器(二): Arduino环境搭建及库安装
  2. rs结果集可以传递给另一个jsp吗_从未如此高调 宝骏RS-5独家设计解读
  3. 解决Word2007文档结构图错乱的问题
  4. 今天,友小盟正式出道了!
  5. ubuntu 安装原生迅雷
  6. S32K144开发笔记5 - SPI驱动MCP2515
  7. javascript中的原型与原型链
  8. 如何让安卓vivo IQOO手机连接adb
  9. LTE入门-孙宇彤-专题视频课程
  10. DNS的正向解析,反向解析以及双向解析