一文读懂阻塞与非阻塞,同步与异步
我们先用一个生活中的例子来感受下
老李早上去公司想上厕所,但是坑不够 ,只有5个,此时 5个坑全满了老李有以下几个反应
同步阻塞
坑满了,此时老李在厕所里等着,并且啥事也不做 (阻塞),一直盯着这5个坑位,直到有人出来 (同步返回结果),他立马去抢这个坑位。
同步非阻塞
坑满了,由于老李平时很爱学习,加上不是很急,此时老李,拿出了手机,看csdn技术博客学习 (非阻塞),但是时不时 观察是否有人从厕所里出来,一旦有人出来 (同步返回结果),他就去抢这个坑位
异步阻塞
坑满了,但是老李有点傻,闭着眼,啥事不干 (阻塞),等有个人出来,看老李傻等着,自己出来了也没反应,就喊了一声,“老李 有坑了 你可以去蹲了” (异步回调返回),老李此时听到消息,立马冲了进去
异步非阻塞
坑满了,老李爱学习拿出手机一直刷技术博客csdn (非阻塞),然后一个人出来了,看老李还在刷博客,自己出来了 还不知道去蹲坑,就喊了一声,“老李 有坑了 你可以去蹲了”(异步回调返回),此时老李 放下手机才去蹲坑。
什么是阻塞、非阻塞
阻塞非阻塞,就是某个线程(老李)访问一个资源(坑位),该资源是否准备就绪的 不同处理方式。
比如,老李访问 坑位,坑位没准备好,老李啥都不能做,就是阻塞;若是立即去做 其他事 就是非阻塞
什么是同步、异步
同步异步是指访问数据的返回方式,
主动请求某数据,并且立即返回就是 同步;
主动请求某数据,但是,不是立即返回,是需要别人 通知 请求者,才能获取结果 这就是异步;
BIO(同步阻塞IO)、NIO(同步非阻塞IO)、AIO (异步IO)
引用一张网上的图片
源自:风间影月 大佬