🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> 1. 同步异步:是否需要关注事情是否结束 > 2. 阻塞和非阻塞:关注的事情未完成,时候可以做其他事情 1. **同步阻塞:小明一直盯着下载进度条,到 100% 的时候就完成。** > 同步体现在:等待下载完成通知; > > 阻塞体现在:等待下载完成通知过程中,不能做其他任务处理; 2. **同步非阻塞:小明提交下载任务后就去干别的,每过一段时间就去瞄一眼进度条,看到 100% 就完成。** > 同步体现在:等待下载完成通知; > > 非阻塞体现在:等待下载完成通知过程中,去干别的任务了,只是时不时会瞄一眼进度条;【小明必须要在两个任务间切换,关注下载进度】 3. **异步阻塞:小明换了个有下载完成通知功能的软件,下载完成就“叮”一声。不过小明仍然一直等待“叮”的声音(看起来很傻,不是吗)。** > 异步体现在:下载完成“叮”一声通知; > > 阻塞体现在:等待下载完成“叮”一声通知过程中,不能做其他任务处理; 4. **异步非阻塞:仍然是那个会“叮”一声的下载软件,小明提交下载任务后就去干别的,听到“叮”的一声就知道完成了。** > 异步体现在:下载完成“叮”一声通知; > > 非阻塞体现在:等待下载完成“叮”一声通知过程中,去干别的任务了,只需要接收“叮”声通知即可;【软件处理下载任务,小明处理其他任务,不需关注进度,只需接收软件“叮”声通知,即可】 也就是说,**`同步/异步是“下载完成消息”通知的方式(机制),而阻塞/非阻塞则是在等待“下载完成消息”通知过程中的状态(能不能干其他任务)`**,在不同的场景下,同步/异步、阻塞/非阻塞的四种组合都有应用。 所以,综上所述,`同步和异步仅仅是关注的消息如何通知的机制,而阻塞与非阻塞关注的是等待消息通知时的状态`。也就是说,`同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下是由触发机制来通知处理消息者`,所以在异步机制中,`处理消息者和触发机制之间就需要一个连接的桥梁`: > 在银行的例子中,这个桥梁就是小纸条上面的号码。 > > 在小明的例子中,这个桥梁就是软件“叮”的声音。 链接:https://www.jianshu.com/p/aed6067eeac9