通俗解释同步/异步,阻塞与非阻塞

大部分情况下,同步就是阻塞的意思,异步就是非阻塞的意思。但是在某些条件下讨论,其实还是有区别的。

比如在讨论IO的时候,这几个概念确实是不一样的

在IO环境里

同步IO指的是,用户要全程参与这个IO过程,强调的是一个过程。

异步IO就是说,你发起IO请求后,剩下的不用管了,系统会自己在可以IO的时候就主动调用你的回调函数,也就是主动来通知你,然后把做IO操作,这个时候,你是不用去参与这个过程的,全部交给了操作系统

阻塞的意思很好理解,就是卡在那里一直等着回复。

非阻塞的意思就是不等待,发起请求后,就立马返回了,不去管IO到底完成了没。系统也不会主动来通知你。这个可以看出和异步IO就有很明显的区别了

那为什么说java的NIO,是同步非阻塞。就是说他虽然执行IO请求的时候,可以去干别的事情,但是还是要不断的去轮询系统是否可以进行IO操作了,如果可以,NIO就马上进行IO操作。看到没,这里NIO虽然不会被阻塞,但是你还是要主动去进行IO,所以整个IO过程你还得操心,这就是同步

异步的话就爽了,不需要全程参与这个过程,只要发起IO请求后,提供一个回调函数就行,系统准备好了,自动会来调用,不需要操心剩下的事情,是真正上的异步。

 

如果还不好理解,可以拿厨房做菜的例子说一下。

假如你正在炒菜,又要煮汤,这个时候,如果你放下炒菜,去煮汤,那这是阻塞了。

你既要负责炒菜,又要负责把汤煮好,这个煮汤的过程你要全程参与,这是同步。

如果你一边炒菜,把火点起来煮汤后,马上又去炒菜,不管那边煮汤的情况了。这是非阻塞

但是你为了汤不洒出来,还要时不时回头看一下汤(轮询),然后看到汤煮好了,马上又跑过去把汤端走这是同步非阻塞。也就是一心二用,一遍在干着手里的事情,你还要去操心汤好了没。

如果你炒菜,但是把火点起来煮汤后,你选择叫一个人帮你看着,煮好了之后让他端开。这个时候你不用管汤怎么样了,反正有人会帮你搞好,这是异步了,不需要去操心汤那边的事情了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值