糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 同步阻塞 同步非阻塞 异步阻塞 异步非阻塞

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

时间:2024-02-28 20:28:55

相关推荐

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

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

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

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

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

同步:

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

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

异步:

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

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

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

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

阻塞:

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

特点:调用方被阻塞

非阻塞:

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

特点:调用方没有被阻塞

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

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

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

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

同步阻塞

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

同步非阻塞

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

异步阻塞

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

异步非阻塞

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

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

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

原文链接:/qq_36963372/article/details/83353017

如果觉得《同步阻塞 同步非阻塞 异步阻塞 异步非阻塞》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。