BIO,NIO,AIO的区别有哪些?

要理解BIO,NIO,AIO,首先要理解同步和异步,阻塞和非阻塞这两对概念。

举个例子,去银行存钱,将钱和存折都交给了窗口的服务人员,然后你要一直坐在那里等柜员帮你处理好业务,最后告诉你存好了把存折还给你,你再离开,这是同步。

如果刚好这个柜员是你的发小,你跟他说:“我还有事先走了,一会儿存好了你打电话告诉我一声。”然后你不用等待流程完成,就可以离开了,这是异步。

同步和异步的区别在于当前的请求返回需不需要拿到执行结果。

还是这个例子,去银行存钱的时候发现每个窗口都有人排队,这时候你要办理业务就只能也在这里排队,没排到你之前你哪里也去不了,这是阻塞。

如果这个银行有自动取号机,你在自动取号机上输入了你需要办理存钱业务和手机号,然后给了你一个号,等接到短信通知已经到你的号了,你再办理业务。这是非阻塞。

阻塞和非阻塞的区别在于,请求能不能提交,阻塞的情况下你要存钱这个请求是提交不了的,你必须等前面的请求处理完了才能提交请求,而非阻塞的情况下无论前面有没有请求待处理,你的请求都是可以提交的(也就是上面例子中的取号)。

再来看以上三种IO的区别
BIO(同步阻塞):线程发起IO请求,不管内核是否准备好IO操作,从发起请求起,线程一直阻塞,直到操作完成。联系前面的例子,也就是在线程发起请求后就会一直等待IO操作结果,而且其他需要IO操作的请求都无法发起了(阻塞了)。

NIO(同步非阻塞):线程发起IO请求,立即返回;内核在做好IO操作的准备之后,通过调用注册的回调函数通知线程做IO操作,直到操作完成。这个过程中多个线程的IO请求都是可以被提交的,只是何时执行,需要等待。NIO中会有一个selector选择器来不断的轮询提交的请求可不可以被处理。具体可以参考下图:
在这里插入图片描述
AIO(异步非阻塞):线程发起IO请求,立即返回;内存做好IO操作的准备之后,做IO操作,直到操作完成或者失败,通过调用注册的回调函数通知线程做IO操作完成或者失败。在AIO操作中,不仅IO请求可以被提交,而且在提交请求后,线程不需要等待IO结果,可以继续去执行其他操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值