关于同步/异步,阻塞非阻塞的组合理解

本文通过小李购买iPad的生活场景,生动解释了同步阻塞、同步非阻塞、异步阻塞和异步非阻塞四种IO模型的工作原理。同步阻塞导致线程等待结果,效率低下;同步非阻塞允许服务端查找货物,期间客户端可做其他事;异步阻塞仍需客户端等待通知;而异步非阻塞则是服务端主动送达,实现高效沟通。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

小李今天想在张老板那边买ipad,打电话去问,不知道有没有货

同步阻塞

电话拨通~~~
小李 : 喂,张老板有没有ipad?
张老板 : 我还不知道有没有,等我看看
----------------【电话持续连接中】----------------
(此是张老板在找货,小李干等着)
20分钟后…
张老板 : 有货,你来吧
小李 :行(挂断了电话)

可以得知,这种效率很低,就是传统的BIO,一个请求过去,必须等到结果返回后才结束,此是线程被阻塞了,啥也干不了

同步非阻塞

电话拨通~~~
小李 : 喂,张老板有没有ipad?
张老板 : 我还不知道有没有,等我看看
----------------【电话挂断】----------------
(此是张老板在找货,小李干其他的)
5分钟后…张老板拨通电话
张老板 :我还没找到呢
小李 : 好吧
----------------【电话挂断】----------------
10分钟后…张老板拨通电话
张老板 :我再找找看,记得是有的,现在没找到
小李 : 不着急,慢慢找
----------------【电话挂断】----------------
5分钟后…张老板拨通电话
张老板 :小李啊,我种于找到了,你过来吧
小李 : 好的
----------------【电话挂断】----------------

这个是典型的NIO,两方通讯后,线程不会被挂起,服务端会一直轮询监听事件,每隔一段时间给客户端回应结果,直到有可用结果后结束通讯

异步阻塞

电话拨通~~~
小李 : 喂,张老板有没有ipad?
张老板 : 我还不知道有没有,有了告诉你
----------------【电话挂断】----------------
(此是张老板在找货,小李傻等着)
20分钟后…张老板拨通电话
张老板 :找到了,过来吧
小李 : 行

这种方式一般用不着,感觉特别傻,效率也低

异步非阻塞

电话拨通~~~
小李 : 喂,张老板有没有ipad?
张老板 : 我还不知道有没有,你等着吧,有了20多分钟后送你家来
----------------【电话挂断】----------------
(此是张老板在找货,小李做其他自己的事情)
20分钟后
if(有货){
张老板把ipad送小李家里了
}else{
小李没等到ipad,知道那边没货了
}

这个是典型的AIO,两方通讯后,线程不会挂起,各做各的事情,有结果了直接返回
这个文章解释得比较专业,还有netty的,我这个纯属个人生活化的理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值