同步与异步阻塞与非阻塞
摘要
一直为同步异步,阻塞非阻塞概念所困扰,特定总结了下
一、同步与异步的区别
1、概念介绍
同步:所谓同步是一个服务的完成需要依赖其他服务时,只有等待被依赖的服务完成后,依赖的服务才能算完成,这是一种可靠的服务序列。要么成功都成功,失败都失败,服务的状态可以保持一致。
异步:所谓异步是一个服务的完成需要依赖其他服务时,只通知其他依赖服务开始执行,而不需要等待被依赖的服务完成,此时该服务就算完成了。至于被依赖的服务最终是否真正完成,无法确定,所以它是不可靠的服务序列。
2、消息通知
同步:当一个同步调用发出后,调用者要一直等待返回消息(或者调用结果)通知后,才能进行后续的执行;
异步:当一个异步过程调用发出后,调用者不能立刻得到返回消息(结果)。实际处理这个调用的部件在完成后,通过消息回调来通知调用者是否调用成功。
PS:调用者获取依赖服务异步回调结果一般有两种方式:
一种是主动去轮训查询异步回调的结果,
一种调用依赖服务时传入一个callback方法或者回调地址,依赖服务完成之后去调用callback通知调用者。
一般情况,这两种方式都要支持才是一种良好的异步回调设计方法。
3、场景比喻
小明去买奶茶,可能会有两种方式
- 小明点单交钱,然后等着取奶茶;
- 小明点单交钱,然后奶茶妹给了小明一个小票,等小明的奶茶做好了,再告诉小明来取;
第一种方式就是同步,就等着奶茶妹做好奶茶,奶茶做好之后,小明拿到奶茶才算完成整个任务第二种方式就是异步,奶茶妹给了小明一个小票,小明就算完成了。至于最后奶茶做好没有,反正奶茶妹会告诉小明的,那是后面的事情了。
4、总结
同步与异步着重点在消息通知的方式,也就是调用结果通知的方式。结合场景就是,拿到奶茶的方式。
二、阻塞与非阻塞的区别
1、概念介绍
- 阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。函数只有在得到结果之后才会返回。
阻塞调用和同步调用不同的。
对于同步调用来说,很多时候当前线程可能还是激活的,只是从逻辑上当前函数没有返回而已,此时,这个线程可能也会处理其他的消息。还有一点,在这里先扩展下:
1.如果这个线程在等待当前函数返回时,仍在执行其他消息处理,那这种情况就叫做同步非阻塞;
2.如果这个线程在等待当前函数返回时,没有执行其他消息处理,而是处于挂起等待状态,那这种情况就叫做同步阻塞;所以同步的实现方式会有两种:同步阻塞、同步非阻塞;同理,异步也会有两种实现:异步阻塞、异步非阻塞;
对于阻塞调用来说,则当前线程就会被挂起等待当前函数返回;
- 非阻塞:非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
虽然表面上看非阻塞的方式可以明显的提高CPU的利用率,但是也带了另外一种后果就是系统的线程切换增加。 增加的CPU执行时间能不能补偿系统的切换成本需要好好评估。
2、场景比喻
还是小明去买奶茶,可能会有两种方式
- 2.1、小明点单交钱,然后等着取奶茶; ``` 1、小明在等着取奶茶的时候呢,啥都不干,就等着; 小明等奶茶的行为就叫做阻塞,小明在等奶茶的时候,阻塞了!而这种方式又叫做同步阻塞。
2、小明在等着取奶茶的时候呢,翻出手机,一会翻翻微信朋友圈,一会瞅瞅奶茶妹有没有做好奶茶; 小明这种行为就叫做非阻塞,因为没有阻塞在等奶茶这件事情上。而这种方式又叫做同步非阻塞。
- 2.2、小明点单交钱,然后奶茶妹给了小明一个小票,等小明的奶茶做好了,再告诉小明来取;
1、奶茶妹给了小明一个小票,然后小明还是傻等着; 小明这种拿到票还傻等着的行为,就叫阻塞。而这种行为,又叫做异步阻塞!这种最傻了。
2、奶茶妹给了小明一个小票,然后小明翻出手机一直刷朋友圈, 过了一会儿奶茶妹说小明你的奶茶好了,过来拿,小明才放下手机去拿奶茶。 这种方式就叫做非阻塞,又叫着异步非阻塞! ```
3、总结
阻塞与非阻塞的着重点在于当前线程等待消息返回的行为。换成场景就是,小明等奶茶的行为。
三、大总结
- 1、同步阻塞:小明啥都不干等奶茶。
- 2、同步非阻塞:小明一边玩手机一边等奶茶。
- 3、异步阻塞:小明拿着小票啥都不干等着奶茶妹告诉他奶茶好了
- 4、异步非阻塞:小明拿着小票玩着手机等着奶茶妹告诉他奶茶好了
转自http://my.oschina.net/haoran100/blog/707197
转载于:https://www.cnblogs.com/Bonker/p/5652316.html
同步与异步阻塞与非阻塞相关推荐
- 同步与异步,阻塞与非阻塞的区别
1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...
- setstate是同步还是异步_【vert.x准备篇1】同步和异步,阻塞和非阻塞概念澄清
为了能更好的理解vert.x的线程模型,我们必须要先明确几个概念:同步(Synchronous)和异步(Asynchronous),阻塞(Blocking)和非阻塞(Non-Blocking).关于这 ...
- 那些年让你迷惑的阻塞、非阻塞、异步、同步
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在IT圈混饭吃,不管你用什么编程语言.从事前端还是后端,阻塞.非阻塞.异步.同步这些概念,都需要清 ...
- 这次,让我们捋清:同步、异步、阻塞、非阻塞
继上一篇说透I/O模型后,我们来谈谈网络 I/O 经常会伴随的几个容易令人混淆的概念:同步.异步.阻塞.非阻塞的区别. 这篇写完之后铺垫就差不多了,之后就正式开始 Netty 深度剖析了,敬请期待,嘻 ...
- 阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一锅端
承接上文的操作系统,关于IO会涉及到阻塞.非阻塞.多路复用.同步.异步.BIO.NIO.AIO等几个知识点.知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉. 1 阻塞跟非阻塞 1.1 阻塞 ...
- 并发、并行、串行、同步、异步、阻塞、非阻塞
并发.并行.串行.同步.异步.阻塞.非阻塞 实际上同步与异步是针对应用程序与内核的交互而言的. 同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看IO操作(也就是我们说的非阻塞)是 ...
- 老张喝茶 教你同步异步 阻塞与非阻塞(转)
原文 老张爱喝茶,废话不说,煮开水. 出场人物:老张,水壶两把(普通水壶,简称水壶:会响的水壶,简称响水壶). 1 老张把水壶放到火上,立等水开.(同步阻塞) 老张觉得自己有点傻 2 老张把水壶放到火 ...
- 理解同步异步、阻塞与非阻塞
"阻塞"与"非阻塞"与"同步"与"异步"不能简单的从字面理解,提供一个从分布式系统角度的回答. 1.同步与异步 同步和异 ...
- linux socket 阻塞与非阻塞,同步与异步
在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: 所谓同步,就是在c端发出 ...
- linux 同步与异步--阻塞与非阻塞型I/O
同步阻塞IO 在这个模型中,应用程序(application)为了执行这个read操作,会调用相应的一个system call,将系统控制权交给kernel,然后就进行等待(这其实就是被阻塞了).ke ...
最新文章
- python删除过期文件_Python删除指定目录下的过期文件的代码
- 在django restful framework中设置django model的property
- 【Hook】postman工具的代码生成工具让它锦上添花
- th:text为null报错_为什么建议你用nullptr而不是NULL?
- php:global变量解析 / function 的作用域
- 如何直观的看出主题模型学习结果的好坏
- 3天超4亿 《阿丽塔:战斗天使》中国票房超北美
- leetcode190-颠倒二进制位
- PHP面向对象构造函数,析构函数
- Python 字符串类型格式化
- 各种Demo下载网址
- 一键解决Windows聚焦不更新的方法
- matlab模拟光伏发电,一种基于MATLAB的小型独立光伏发电仿真模型的制作方法
- 戴尔服务器关闭系统自检,戴尔开机自检取消操作方法
- 怎么将PDF文件分成若干个小文件呢
- java 加载3d模型_实现在Java 3D中载入外部3D模型文件方法详解
- 六款强大的开源数据挖掘工具
- 【Ubuntu升级报错】“the following signatures couldn’t be verified because the public key is not available”
- 随机模拟在多排服务器上的应用,在Excel中应用随机函数模拟多服务台单队列排队系统...
- 华为ModelArts(声音分类与文本分类项目的创建及使用)
热门文章
- NET快速信息化系统开发框架 V3.2 -WinForm部分全部重构为Dev风格界面
- EntityFrameWork连接多Db配置
- 大数据 -- Spark
- 第八章:软件包的安装与管理
- 《想吃麻花现给你拧》
- 知方可补不足~sqlserver中使用sp_who查看sql的进程
- 如何清空c盘只剩系统_C盘满了怎么办?除了重装系统,还有这些办法!
- qt界面嵌入web_使用Qt WebAssembly而不是JavaScript创建Web用户界面
- zephyr_Facebook,IBM,Yahoo和更多新闻发布的物联网Zephyr项目
- 组件化开发_思维导图