AIO、BIO、NIO、多路复用详细图解

阻塞式IO(BIO)

这个是超级慢的一个IO模型,就是当应用程序要进行系统调用的时候,向内核发送请求调用,这个时候要一直等待IO的状态变化,直到IO的状态符合了应用程序的要求,然后内核进行复制数据,最后返回给应用程序,这个过程是阻塞的,应用程序做不了其他的任何事情。
在这里插入图片描述

非阻塞式IO(NIO)

非阻塞式IO指的是应用程序向内核发送系统调用的请求过程中,如果内核没有准备好数据,那么久返回一个无数据,下次应用程序继续发送请求,就这样一直轮询,直到内核监听的IO状态达到了应用程序的要求,那么久开始复制数据然后成功返回。
在这里插入图片描述

IO多路复用(NIO+Selector)

Selector也被翻译为多路复用器
应用程序想服务器内核发送请求,数据为准备哈,则服务器一直阻塞,等数据准备好了之后就通知应用程序可以进行调用了,然后应用程序再进行调用,复制数据到成功返回。
这样的好处是内核可以监听多个IO,不止一个IO,任何一个IO的状态变化都会返回给应用程序变化的信息。
在这里插入图片描述
部分代码:

//            不停地监听selector
            while (true)
            {
                selector.select();
//                获得被触发的keys
                Set<SelectionKey> selectionKeys = selector.selectedKeys();
                for (SelectionKey key : selectionKeys)
                {
                    handles(key);
                }
//                清空已经执行的key,不然会和下次监听的事件混合在一起
                selectionKeys.clear();

异步IO模型

应用程序在第一次进行系统调用的时候,如果数据没有准备好了的话,那么内核返回无数据,在内核的内部会一直监听IO的变化,如果条件符合应用程序上次的请求调用,那么内核会自动的帮应用程序进行数据复制,等到数据复制成功了之后,会直接给应用程序发信号说:上次你要的请求的数据我已经给你复制好了,来拿吧!这个就是纯异步IO模型。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值