一文读懂阻塞与非阻塞,同步与异步

本文通过生活中的上厕所例子,生动解释了同步阻塞、同步非阻塞、异步阻塞和异步非阻塞的概念。同步与异步关注的是数据返回的方式,而阻塞与非阻塞关注的是线程等待资源的状态。同步阻塞如老李在厕所门口等待;同步非阻塞则是老李学习并时刻留意空位;异步阻塞是老李被动等待他人提醒;异步非阻塞则是在被提醒后才采取行动。了解这些概念有助于更好地理解计算机IO操作的处理方式。

我们先用一个生活中的例子来感受下

老李早上去公司想上厕所,但是坑不够 ,只有5个,此时 5个坑全满了老李有以下几个反应

同步阻塞

坑满了,此时老李在厕所里等着,并且啥事也不做 (阻塞),一直盯着这5个坑位,直到有人出来 (同步返回结果),他立马去抢这个坑位。

同步非阻塞

坑满了,由于老李平时很爱学习,加上不是很急,此时老李,拿出了手机,看csdn技术博客学习 (非阻塞),但是时不时 观察是否有人从厕所里出来,一旦有人出来 (同步返回结果),他就去抢这个坑位

异步阻塞

坑满了,但是老李有点傻,闭着眼,啥事不干 (阻塞),等有个人出来,看老李傻等着,自己出来了也没反应,就喊了一声,“老李 有坑了 你可以去蹲了” (异步回调返回),老李此时听到消息,立马冲了进去

异步非阻塞

坑满了,老李爱学习拿出手机一直刷技术博客csdn (非阻塞),然后一个人出来了,看老李还在刷博客,自己出来了 还不知道去蹲坑,就喊了一声,“老李 有坑了 你可以去蹲了”(异步回调返回),此时老李 放下手机才去蹲坑。

什么是阻塞、非阻塞

阻塞非阻塞,就是某个线程(老李)访问一个资源(坑位),该资源是否准备就绪的 不同处理方式。
比如,老李访问 坑位,坑位没准备好,老李啥都不能做,就是阻塞;若是立即去做 其他事 就是非阻塞

什么是同步、异步

同步异步是指访问数据的返回方式
主动请求某数据,并且立即返回就是 同步;
主动请求某数据,但是,不是立即返回,是需要别人 通知 请求者,才能获取结果 这就是异步;

BIO(同步阻塞IO)、NIO(同步非阻塞IO)、AIO (异步IO)

引用一张网上的图片
源自:风间影月 大佬
在这里插入图片描述

done

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值