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

在计算机领域,同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;
异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

很多人认为,阻塞和同步是一回事,非阻塞和异步是一回事。其实不然,我们可以把同步异步分为一类,阻塞非阻塞分为一类。下面来举个小例子说明:

  1. 同步阻塞:小明一直盯着下载进度条,到 100% 的时候就完成。

同步体现在:等待下载完成通知;

阻塞体现在:等待下载完成通知过程中,不能做其他任务处理;

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

同步体现在:等待下载完成通知;

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

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

异步体现在:下载完成“叮”一声通知;

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

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

异步体现在:下载完成“叮”一声通知;

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

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

所以,综上所述,同步和异步仅仅是关注的消息如何通知的机制,而阻塞与非阻塞关注的是等待消息通知时的状态。也就是说,同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下是由触发机制来通知处理消息者,所以在异步机制中,处理消息者和触发机制之间就需要一个连接的桥梁。

最后,请大家注意理解“消息通知机制”和“等待消息通知时的状态”这两个概念,这是理解四个概念的关键所在。

其实,在实际项目当中,作为前端来说(java是可以有多线程的,但前端只有一个主线程),现在基本上都是使用异步方式了,但是非阻塞的这个操作在我们所使用的框架和浏览器中已经帮我们做了这个工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
同步非阻塞与异步非阻塞都是针对并发编程的不同策略,主要区别在于它们如何管理时间片以及在处理任务时的交互方式。 ### 同步非阻塞 (Synchronous Non-blocking) - **特点**: 系统能持续接收并处理新请求,即便是在处理较长耗时的操作期间也是如此。 - **工作流程**: 接收一个请求后,系统并不等待其完成,而是继续处理其他未完成的请求,并将当前请求放入等待队列中。当当前请求完成或超时时,系统会从等待队列中取出并继续处理。 - **优势**: 提高了并发性能和整体系统利用率。 - **劣势**: 开发和调试相对复杂,尤其是在多任务切换时需要更精细的控制。 ### 异步非阻塞 (Asynchronous Non-blocking) - **特点**: 更侧重于在处理I/O和其他耗时任务时不阻塞主线程或任何其他的任务流。 - **工作流程**: 当遇到I/O操作、数据库查询等需要等待的情况时,程序会立即返回给用户,而不是进入阻塞状态。这使得在等待结果的同时,系统能够处理更多的任务。 - **优势**: 显著提高并发处理能力,特别是面对大量轻量级任务时。 - **劣势**: 需要使用回调函数、事件循环或多路复用器等复杂的机制来组织和管理任务,增加了代码的复杂性和难度。 ### 主要区别总结 - **任务执行顺序与调度**: - **同步非阻塞**:保持任务按接收顺序执行,但在等待耗时操作时,可以并行处理其它任务。 - **异步非阻塞**:任务不受接收顺序限制,一旦遇到耗时操作即返回,直到结果准备好才再次运行。 - **核心目标**: - **同步非阻塞**:主要目标是提高整体系统性能和响应速度。 - **异步非阻塞**:着重于最大化I/O操作的效率,特别是在处理大量I/O密集型任务时。 - **实现方式**: - **同步非阻塞** 可以通过优化现有线程或进程的调度实现,例如通过多线程池、异步文件系统等技术。 - **异步非阻塞** 则更多依赖于事件驱动和回调机制,如通过异步IO、基于事件的网络服务器等技术。 ### 相关问题: 1. **异步编程与同步编程的主要区别是什么?** 2. **异步非阻塞编程在哪些场景下特别有效?** 3. **在选择同步非阻塞还是异步非阻塞时,应考虑哪些因素?** 以上介绍了这两种编程策略的核心差异及其应用场景,选择哪种取决于具体的业务需求、系统负载特性以及团队的技术栈和经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值