阻塞非阻塞与同步异步的区别

阻塞非阻塞与同步异步的区别

同步/异步关注的是消息通知的机制,而阻塞/非阻塞关注的是程序(线程)等待消息通知时的状态。

以小明下载文件打个比方,

同步阻塞:

小明一直盯着下载进度条,到 100% 的时候就完成。

同步体:

等待下载完成通知;

阻塞体:

等待下载完成通知过程中,不能做其他任务处理;

同步非阻塞:

小明提交下载任务后就去干别的,每过一段时间就去瞄一眼进度条,看到 100% 就完成。

同步体:

等待下载完成通知,但是要在;

非阻塞体:

等待下载完成通知过程中,去干别的任务了,只是时不时会瞄一眼进度条;【小明必须要在两个任务间切换,关注下载进度】

异步阻塞:

小明换了个有下载完成通知功能的软件,下载完成就“叮”一声。不过小明仍然一直等待“叮”的声音(看起来很傻,不是吗)。

异步体:

下载完成“叮”一声通知;

阻塞体:

等待下载完成“叮”一声通知过程中,不能做其他任务处理;

异步非阻塞:

仍然是那个会“叮”一声的下载软件,小明提交下载任务后就去干别的,听到“叮”的一声就知道完成了。

异步体:

下载完成“叮”一声通知;

非阻塞体:

等待下载完成“叮”一声通知过程中,去干别的任务了,只需要接收“叮”声通知即可;【软件处理下载任务,小明处理其他任务,不需关注进度,只需接收软件“叮”声通知,即可】

也就是说,同步/异步是“下载完成消息”通知的方式(机制),而阻塞/非阻塞则是在等待“下载完成消息”通知过程中的状态(能不能干其他任务)。

总结

同步和异步仅仅是关注的消息如何通知的机制,而阻塞与非阻塞关注的是等待消息通知时的状态。

posted @ 2022-08-22 20:05  FinallySSR  阅读(67)  评论(0编辑  收藏  举报