“阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。
1.同步与异步
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由*调用者*主动等待这个*调用*的结果。

而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。

典型的异步编程模型比如Node.js

举个通俗的例子:
你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。

2. 阻塞与非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

还是上面的例子,
你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果,如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 当然你也要偶尔过几分钟check一下老板有没有返回结果。
在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。

(附:或者也可以这样理解:
老张爱喝茶,废话不说,煮开水。
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
1 老张把水壶放到火上,立等水开。(同步阻塞)
老张觉得自己有点傻
2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
3 老张把响水壶放到火上,立等水开。(异步阻塞)
老张觉得这样傻等意义不大
4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
老张觉得自己聪明了。

所谓同步异步,只是对于水壶而言。
普通水壶,同步;响水壶,异步。
虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。
同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。

所谓阻塞非阻塞,仅仅对于老张而言。
立等的老张,阻塞;看电视的老张,非阻塞。
情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

原文链接:https://www.zhihu.com/question/19732473/answer/20851256

转载于:https://www.cnblogs.com/momo798/p/6121273.html

理解同步异步、阻塞与非阻塞相关推荐

  1. 【好记性不如烂笔头】IO之深入理解同步、异步、阻塞、非阻塞

    IO之深入理解同步.异步.阻塞.非阻塞 一.什么是同步? 二.什么是异步? 什么是阻塞? 什么是非阻塞? 总结 一.什么是同步? 先简单画一个图再解释: 我打算做番茄炒蛋,于是我去街上买点西红柿买点鸡 ...

  2. 同步、异步与阻塞、非阻塞的理解

    一.同步.异步与阻塞.非阻塞 同步和异步都是基于应用程序所在操作系统处理IO事件所采用的方式,同步是应用程序要直接参与IO读写的操作.异步所有的IO读写交给搡作系统去处理,应用程序只需要等待通知. 网 ...

  3. 一篇文章理解 同步异步、阻塞非阻塞

    前述 同步异步,阻塞非阻塞是一些非常常见的概念,但是对于开发者来说往往是用到了很难说清楚. 笔者专门整理了下这方面的概念,作此文以记之. 这部分内容可能存在一些争议,如有不同意见欢迎评论交流. 概念 ...

  4. 理解:什么是同步和异步?什么是阻塞和非阻塞?

    一.同步和异步 同步与异步是指访问数据的机制,同步一般指主动请求并等待IO操作完成的方式. 异步则指主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知. 同步和异步最大的区别就在于:同步 ...

  5. 正确理解同步/异步和阻塞/非阻塞的区别:

    之前一直把异步和非阻塞混为一谈,在 了解BIO和NIO的区别时才发现了两者的差异,看了网上很多文章觉得说的总是差点意思,下面是个人理解: 1.同步 非同步 阻塞 非阻塞 概念 怎样理解阻塞非阻塞与同步 ...

  6. ajax同步非阻塞,同步、异步、阻塞与非阻塞理解

    同步跟异步,阻塞与非阻塞,这两组概念出现在IO操作中常常让人混淆不清,这里是根据自己想到的,看到的,学到的,整理了自己的理解. 这四个概念两两组合,会形成四个新的概念,如下: 1.同步阻塞 :客户端发 ...

  7. 彻底理解同步异步阻塞与非阻塞

    彻底理解同步异步阻塞与非阻塞 前言 用户空间 内核空间 系统调用 用户态 内核态 系统IO 阻塞非阻塞 同步异步 前言 最近有同事问我同步异步与阻塞非阻塞有什么区别,后来发现很多同事不能区分这些概念. ...

  8. 简单理解:同步、异步、阻塞、非阻塞

    同步.异步,是一种协作机制: 同步:发出一次请求后必须等到该请求有返回结果,才能继续下一步工作:请求者需主动询问是否有返回结果: 异步:发出一次请求后无需等到该请求有返回结果,即可进行下一步工作:请求 ...

  9. 同步与异步,阻塞与非阻塞的区别

    1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...

最新文章

  1. js 将线性数据转为树形
  2. 如何在分布式场景下生成全局唯一 ID ?
  3. 判断直线与线段是否相交,相交则输出交点x轴坐标
  4. Shell命令-Sort,Join
  5. ocelot简单入门
  6. confirm修改按钮文字_踏入MG动画设计的门,才知道文字动画这么重要……
  7. Python 二维创建与插入值的二种方法
  8. java多线程的安全问题与死锁(面向厕所编程)
  9. 在c语言中large的作用,输入两个数组,调用large函数比较,计数,输出统计结果...
  10. Linux系统安装教程之一:VM14虚拟机+Ubuntu16安装
  11. 使用KXML解析xml数据
  12. 通过链接下载google drive文件
  13. Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程
  14. java短视频开发技术_看Java学员如何用前后端分离技术搭建短视频健身APP
  15. 微信小程序项目开发---第一章 制作首页
  16. 数据治理系列:数仓建模之数仓主题与主题域
  17. ReactNative 深层连结
  18. 数据可视化 信息可视化_可视化数据操作数据可视化与纪录片的共同点
  19. 手把手教学MFC吃豆子教程
  20. mysql删除用户并回收权限

热门文章

  1. 控制反转(IoC)-解析与实现
  2. 别忽视新冠轻症,它会损害你的记忆力
  3. 计算机专业学生却被强迫工厂实习?结果发生意外手指被截肢,学校回应:会治到满意为止...
  4. 英特尔杀入游戏显卡市场:3000元档位,支持光追和AI超分辨率,挑战AMD英伟达...
  5. Deepfake这次不换脸了,直接换了座城市
  6. 为什么老编辑器Vim这么难用,却很受欢迎?
  7. MySQL · 捉虫动态 · show binary logs 灵异事件
  8. 腾讯动漫爬虫与动态随机加载反爬破解技术实战
  9. MMD的unity导入插件
  10. hdoj-2039-三角形