大白话搞懂什么是同步/异步/阻塞/非阻塞(*)

本文通过老王候车的故事,生动解释了同步、异步、阻塞和非阻塞的概念。同步关注调用者是否等待被调用者返回结果,而异步则强调被调用者处理完成后如何通知调用者。阻塞和非阻塞主要描述调用者在等待期间是否可以执行其他任务。Java的IO模型包括BIO、NIO和AIO,分别对应同步阻塞、同步非阻塞和异步非阻塞。选择合适的IO模型应根据业务需求来决定。
摘要由CSDN通过智能技术生成

同步阻塞
放假了,老王回到了乡下,由于乡下的基础设施比较差,当他在车站候车的时候,只能一直干等着,直到公交车的到站。
这时候对于公交车(被调用者)来说,它是“同步“的。老王(调用者)被公交车(被调用者)“阻塞”在站台上。
调用者什么都不做,一直等待被调用者返回结果。

异步阻塞
放完假了,老王回到了大城市开始上班,同样在车站候车,一样在车站干等着,但是大城市的基础设施建设得比较好,当公交车到站的时候,会有广播提示提醒乘客。
那么这时候对于公交车(被调用者)来说,它是“异步“的,到站后会通知调用者。但是此时老王(调用者)还是被公交车(被调用者)“阻塞”在站台上。
调用者什么都不做,一直等待被调用者返回结果,但是被调用者返回时会给出通知。

同步非阻塞
过年了,老王放假回来了乡下,又要开始候车了,这时候他变聪明了,没有一直在车站上干等着,而是去找隔壁的小花叙叙旧。但是又害怕车到站了自己会错过,就只能隔一段时间过来看看车到了没。
那么这时候对于公交车(被调用者)来说,它是“同步“的。但是此时老王(调用者)可以在候车的时候去干其他的的事情,所以他是“非阻塞”的。
调用者去做别的事情,隔一段时间看看被调用者返回的结果。

异步非阻塞
改革春风吹满地,新农村建设正在火热进行中,此时的乡下,公交车里面也安装了车辆到站的提醒广播。现在老王在候车的时候,可以安心的跟小花叙旧了,当听到自己需要乘坐的车辆到站广播时,才过去车站上车。
调用者去做别的事情,等到被调用者返回结果时会给予通知。

这时候对于公交车(被调用者)来说,它是“异步“的,到站后会广播提醒,此时老王(调用者)可以在候车的时候去干其他的的事情,所以他是“非阻塞”的

概念总结
从上面的示例中,我们可以明白一件事情,同步异步,阻塞非阻塞他们针对的对象是不一样的。对于调用者来说是阻塞跟非阻塞,被调用者是同步跟异步。

同步:A调用B,此时只有等B有结果了才返回。
异步: A调用B,B立即返回,无须等待。当B处理完之后会通过通知或者回调函数的方式来告诉A结果。
阻塞:A调用B,A会被挂起,一直在等待B的结果,什么事都不能干。
非阻塞:A调用B,自己不用被挂起等待B的结果,可以去干其他的事情。

Java中相关概念
在Java中的IO模型有三种,分别是BIO(同步阻塞IO),NIO(同步非阻塞IO),AIO(异步非阻塞IO)。这时候我们会发现,异步阻塞的模型是不存在的。

NIO跟AIO的出现解决了很多在BIO使用过程中遇到的难题,所以我们在选择使用何种IO的时候需要根据业务场景来做决定,没必要一味追求NIO跟AIO,不仅加大了编码的难度也提高了出错的概率,技术的出现是为了更好的解决问题。

总结:
同步:A调用B,A需要一直等待,直到B返回结果。
异步:A调用B,B立即返回,B处理完之后通知A。
阻塞:A调用B,A会被挂起,一直在等待B的结果,什么事都不能干。
非阻塞:A调用B,自己不用被挂起等待B的结果,可以去干其他的事情。

阻塞就是什么都不干在等待。非阻塞就是去干别的事情不用等待。
同步对应阻塞。异步对应非阻塞。

方法的功能就是执行操作,或者是执行操作完成后返回一个结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值