博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
同步异步与阻塞非阻塞
阅读量:4326 次
发布时间:2019-06-06

本文共 1389 字,大约阅读时间需要 4 分钟。

一、同步与异步

 首先,同步与异步是消息的通信机制

  • 同步就是在发出一个功能调用后,在没有得到结果之前,该调用不会返回,如果调用返回了,那就证明有返回值了。调用者主动等待调用结果。
  • 异步就是在发出一个功能调用后,调用就马上返回了,但是没有在那一刻马上返回结果(功能调用需要时间执行才会返回结果),简单来说就是调用发出后,调用者不会马上得到结果,而是通过被调用者通过状态、通知调用者,或者是回调函数来通知调用者,在调用者收到结果之前,完全可以去干别的事情,而不是一味的等待结果的返回。如果异步功能用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一 种很严重的错误)。如果是使用通知的方式,效率则很高,因为异步功能几乎不需要做额外的操作。至于回调函数,其实和通知没太多区别。

      小结:同步与异步针对的是函数/任务的调用方式:同步就是当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态。而异步情况下是当一个进程发起一个函数(任务)调用的时候,不会等函数返回,而是继续往下执行当,函数返回的时候通过状态、通知、事件等方式通知进程任务完成。

二、阻塞与非阻塞

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

  • 阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)。函数只有在得到结果之后才会将阻塞的线程激活。有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。
  • 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

     小结:阻塞与非阻塞针对的是进程或线程:阻塞是当请求不能满足的时候就将进程挂起,而非阻塞则不会阻塞当前进程。

三、举例

老张爱喝茶,废话不说,煮开水。

出场人物:老张,水壶两把(普通水壶,简称水壶会响的水壶,简称响水壶)。

  1 老张把水壶放到火上,立等水开。(同步阻塞)
    老张觉得自己有点傻

  2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
    老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。

  3 老张把响水壶放到火上,立等水开。(异步阻塞)
    老张觉得这样傻等意义不大

  4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
    老张觉得自己聪明了。

同步异步,只是对于水壶而言。

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

阻塞非阻塞,仅仅对于老张而言。

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

——来源网络,作者不明。
以上内容均来自于:、

扩展知识链接:

 

转载于:https://www.cnblogs.com/guotianbao/p/8043525.html

你可能感兴趣的文章
作业代码
查看>>
网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中
查看>>
暑假集训-7.31总结
查看>>
安卓:动态注册广播
查看>>
Oracle系列--基础理论
查看>>
广州.NET微软技术俱乐部微信群各位技术大牛的blog
查看>>
npm安装vue-cli时速度慢,fetchMetadata经常卡住并报异常
查看>>
POJ:1703-Find them, Catch them(并查集好题)(种类并查集)
查看>>
HDU:5040-Instrusive
查看>>
校验器
查看>>
thread/threading——Python多线程入门笔记
查看>>
linux 命令汇总(搜索、fdfs、常用命令),虚拟机dump文件
查看>>
Nginx 反向代理解决浏览器跨域问题
查看>>
为什么现在我最终推荐内存OLTP
查看>>
git error: failed to push some refs to...
查看>>
Markdown指南
查看>>
influxDB的安装和简单使用
查看>>
JPA框架学习
查看>>
JPA、JTA、XA相关索引
查看>>
机器分配
查看>>