三分钟弄懂BIO,NIO,AIO中阻塞,同步,异步的概念

阻塞非阻塞,同步异步,这两组概念是描述不同的层面,好比男人女人,大人小孩一样,一个描述的是性别层面,一个是年龄层面;同步也可能阻塞也可能不阻塞,异步也可能阻塞也可能不阻塞,两者不是绝对的相关。

阻塞非阻塞描述的是客户端这边的一个结果,而同步异步描述的是请求执行的方式和过程。下面用一个例子通俗易懂的让你理解这个概念:

就好比你想去银行取钱,你自己去取(同步),你就不能同时干别的事情了,但你也可以叫你的朋友帮忙去取(开启一个新的线程去执行,异步);但是不管你采用哪种方式,你自己去可能会遇到堵车,银行排队(同步阻塞),你叫朋友去呢,也可能会遇到堵车和排队(异步阻塞),所以最终的结果是你没有按时取到钱(阻塞)

那么上述过程对应到IO模型中是什么呢:

1.BIO
一个用户与服务器建立连接就开启一个线程,一般是从线程池中取的,比如你线程池一共就100个线程,或者服务器内存最多就能支撑100个线程同时开,这时第101个人进来就连接不上了,对于那第101个人来说,就是阻塞了。

2.NIO
由于用户连接之后,并不总是时时刻刻都在发送请求,例如你登陆了微信,可能2个小时才说一句话,中间这个过程你并没有与服务器进行交互,即请求,那完全没必要为你一直开着一个线程,太浪费资源,而是通过一个selector进行监听,等你有请求的时候再为你开一个线程,例如你突然看朋友圈了,这就是一个请求。整个上述过程是请求驱动的,又称事件驱动的。

3.AIO
NIO有一个问题就是你上述的请求,他是调用接口的方式为你处理,所以你的请求要一直等待接口的响应,你的请求无法继续运行下去,去处理别的事情;那AIO的思路是通过开启一个新的线程帮你去处理具体的事务,等处理完了,给你主线程一个回调,通知你我处理完了,这样主线程不需要等待。一般异步的方式能高效的解决阻塞的问题,所以基本上没有异步阻塞这个词。

上述仅代表个人理解,若有不正确之处,欢迎留言指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值