深入理解阻塞,非阻塞与同步,异步

深入理解阻塞,非阻塞与同步,异步

看了很多博主的文章,都有自己的看法,但是没有让我真正的理解阻塞,非阻塞与同步,异步,徘徊在"刚看完一篇:哦,原来如此-->然后再看另一篇:等等,怎么感觉和我之前理解的不一样..."
我就对我看的博客做一些总结,希望帮助能理清他们之间的联系与区别的困惑。
先看一下以下我借鉴的图片
在这里插入图片描述

阻塞,非阻塞与同步,异步

相信大家对同步与异步的联系会停留在:
同步似乎等价于阻塞,异步则等价于非阻塞。其实有些狭义,但不可否认的是,在一定情况下,确实可以这么认为;因为同步一定存在着阻塞状态,而异步一定不存在非阻塞的状态。

然而并不是,还是借鉴的图
在这里插入图片描述
阻塞和非阻塞强调的是程序在等待调用结果(消息,返回值)时的状态.

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

同步和异步强调的是消息通信机制。

所谓同步,就是在发出一个"调用"时,在没有得到结果之前,该“调用”就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由“调用者”主动等待这个“调用”的结果。
而异步则是相反,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,
调用者不会立刻得到结果。而是在"调用"发出后,"被调用者"通过状态、通知来通知调用者,或通过回调函数处理这个调用。

在这里插入图片描述
总结
阻塞、非阻塞、多路IO复用,都是同步IO,异步必定是非阻塞
在这里插入图片描述
(和推荐博客一起食用,效果最佳)
推荐博客
网络I/O中的同步、异步、阻塞和非阻塞概念

参考博客
阻塞与非阻塞的区别
真的理解同步和异步了吗?
同步请求和异步请求的区别
关于同步、异步与阻塞、非阻塞的理解
同步、异步、阻塞与非阻塞的理解与使用场景

猜你喜欢

转载自blog.csdn.net/qq_36652517/article/details/86646794
今日推荐