异步与阻塞的原理及对照

 我来答
抛下思念17
2022-07-19 · TA获得超过1.1万个赞
知道大有可为答主
回答量:6530
采纳率:99%
帮助的人:37.2万
展开全部
之前写《RabbitMQ的Python客户端pika使用调研》一文时,讨论过关于消息队列异步解耦的功效。此文初次发布时,有些自我认识和表达上的不清晰,还让某大牛朋友的误解,掀起了我们关于异步和阻塞问题概念的讨论。事实是越辩越清,真理是愈辩愈明的。近期我在公司负责的混合云管服务的开发中,涉及到对云主机实例的:创建、开/关机、重启、删除等许多需要调用第三方、且耗时较长,需要用到异步来优化的场景,便觉得有必要就“异步”和“阻塞”这两个概念,做个总结性的梳理。

同步和异步,阻塞和非阻塞, 这几个老生常谈的概念,我们却常常混淆,傻傻分不清楚。一度以为同步肯定就是阻塞,异步必然就是非阻塞,其实他们是描述通信机制的,两个维度下的不同取值,他们两两组合来完整地描述通信机制中,发起调用,和获取返回结果的过程。

同步的意思就是调用方需要主动等待结果的返回,即发起调用和获取结果放在一个步骤里完成;

异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如,状态通知,回调函数等,即发起调用和获取结果,作为两个步骤来完成。

是指结果返回之前,调用方当前线程被挂起,不做任何事。即没有结果之前,我作为调用方,啥别的事都不干。

是指结果在返回之前,线程可以做一些其他事,不会被挂起。即没有结果之前,我作为调用方,我也不干等着,接着做其他的事情。

同步和异步,阻塞和非阻塞主要关注的点不同,把通信过程看作一次“问答”过程:

有人会问同步还能非阻塞,异步还能阻塞?当然是可以的,下面为了更好的说明他们的组合之间的意思,用几个简单的例子说明:

NIO、BIO、AIO区别
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迪凯特科技(北京)有限公司
2023-07-28 广告
MCS-51串行接口有四种工作方式,分别是:1. 方式0(8位同步移位寄存器方式),一般用于外接移位寄存器芯片扩展I/O接口。2. 方式1(10位异步收发方式),通常常用于双机通信。3. 方式2(11位异步收发方式),通常常用于多机通信。4... 点击进入详情页
本回答由迪凯特科技(北京)有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式