用个小故事简单讲讲他们的区别吧
老王有一天要去银行取钱,有四家银行分别叫做,BIO银行,NIO银行,IOMultiplexing银行,AIO银行
1.老王去了BIO银行(同步阻塞)
老王和柜员说:我要取30w人民币买辆自行车,
柜员说:好的,您请坐,请稍等。办理好后钱会自动到这个出钱口,请自提。
老王就在出钱口等了10min后拿走了30w
2.第二天老王来了NIO银行(同步非阻塞),
老王和柜员说:我要去300w人名币买个厕所,
柜员说:好的,先生在等待的时候你先去其他地方逛逛,等我这边处理好了,你就可以过来拿了。
老王:好的,那我去上个厕所,再来拿
2min后,老王:我的钱取好了吗?(轮询机制)
柜员:还没呢,你再去逛逛。
老王:你就不能好了之后通知我一下吗?
柜员:我们这没有喇叭…
一顿反复横跳之后,老王终于取走了300w
3.第三天老王来到了IOMultiplexing银行 (多用复路)
老王和柜员说:我要取3000w买只会下蛋的母鸡
柜员说:好的,您请坐,请稍等。
这时老李来存钱了,柜员也同时帮他办理了。
老王说:不是我先来的吗,我的钱什么时候能取出来?
柜员说:存钱和取钱走的不是一条路,可以同时办理
老王:好吧。
4.第四天老王来到了AIO银行(异步)
老王和柜员说:我要取3个亿给我三个儿子实现一下小目标
柜员说:好的,您可以回去了,钱到账了到时候会发短信通知您的。
简单再总结一下我理解的阻塞和非阻塞,同步和异步的区别。
阻塞和非阻塞:在发起请求在获取到结果的过程中,是否可以进行其他操作。(相对于该线程是否被堵塞了)
同步和异步:也就是主动获取结果和被动获取结果的差别,同步就是需要自己去轮询(NIO需要自己轮询通道的状态),异步则是会主动通知已经完成。