同步阻塞 同步非阻塞 异步阻塞 异步非阻塞

博客通过医院就诊的例子,清晰解释了同步、异步、阻塞和非阻塞的概念。同步关注消息通知方式,即调用者是否需要主动查询结果;异步关注结果的传递方式,由任务本身返回结果。阻塞和非阻塞描述等待任务结果时线程的状态。同步阻塞和异步非阻塞提供了不同时间利用率的场景。

今天老师讲了同步阻塞 同步非阻塞 异步阻塞 异步非阻塞。讲完感觉老师自己说的都是前后矛盾的。去网上找了几篇大佬的博客,看完后才有点点感悟。特地小结记下来,若有错误之处,欢迎大家斧正。

首先先弄清楚同步和异步 ,阻塞和非阻塞。

1. 同步和异步(指的是消息)

同步和异步描述的是消息通信的机制

同步:

一次调用,一次返回;整个过程就是同步调用的过程;

特点:针对每次都是一次同步的调用;

异步:

调用后,没有得到想要的返回(或者不care返回值);而是通过后面的回调、状态通知的方式获得结果;

特点:通过回调callback、状态或者通知的方式告知调用方结果;

2. 阻塞和非阻塞 (指的是进程/任务)

描述的是程序在等待调用结果(消息、返回值)时的状态

阻塞:

调用方线程在等待结果返回过程中,线程被挂起,(调用方不能处理其它事情)等结果返回后,唤醒线程;

特点:调用方被阻塞

非阻塞:

调用方线程在等待结果的过程中,线程没有被挂起,(可以处理其它事情)

特点:调用方没有被阻塞

这里的关系就像水火和冷热一样,是两组不同的相对概念。但是第一反应水是冷的,火是热的。其实呢开水温度也有100度,鬼火(磷火)也只有40度。

老师以前叫promise和async时经常说同步要等它执行完,异步就可以不用管。导致和后面学的阻塞与非阻塞产生歧义。

同步异步只是指消息通知给调用方的方式(被动查看,主动返回),阻塞和非阻塞才是等待任务进程调用结果(消息、返回值)时的状态。

通俗的用最近去医院来举例

同步阻塞

去医院挂号,医院的提示铃声坏了,你怕错过什么事也不做(阻塞)一直紧紧盯着当前的就诊号消息(同步)。这叫同步阻塞,时间利用率低


同步非阻塞 

也是去医院的提示铃声坏了,你看着人多便开始刷剧(非阻塞)但是也时不时看一下当前的就诊号消息(同步)。这叫同步非阻塞,时间利用率较高。


异步阻塞

医院的提示铃声修好了,到一定时间它自己会广播提示(异步)。但是你也什么也不做也不看当前就诊信息,就发呆(阻塞)。这叫异步阻塞,效率和同步阻塞没什么两样,时间利用率低。


异步非阻塞

医院的提示铃声修好了,到一定时间它自己会广播提示(异步)。但是你这个时间坐下来看小说,打游戏,刷b站(非阻塞)。没有不刻意查看当前就诊号。这叫异步非阻塞,时间利用率高。

同步是需要自己主动查询任务状态获取信息,异步是任务自己返回结果给调用方。调用方不必主动查询。阻塞就是等待。

版权声明:本文为参考CSDN博主「安心写bug」的原创文章后的总结,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_36963372/article/details/83353017

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值