IO文件---详解BIO、NIO、AIO:同步异步、阻塞非阻塞IO

一、IO的分类

1、根据通信机制

    同步IO:排队,用户线程发送请求后,需要等待IO完成后才能继续执行

    异步IO:并发,用户发起IO请求后可继续执行,IO操作完成后会通知用户线程

2、根据调用状态

     阻塞IO: IO操作需要彻底完成后,才能返回用户空间

    非阻塞IO: IO操作调用后,会立即返回一个状态值,无序IO操作彻底完成后

二、典型IO:BIO、NIO、AIO

(一)BIO---同步阻塞式  JDK1.4前

  1、实现模式

           一个连接请求对应一个线程,服务器为每一个客户端请求创建一个线程

  2、适用场景

       连接数目少,且服务器资源多   

3、缺点

         若这个连接不做任何操作,会造成不必要的线程开销---------改善:线程池

4、使用Stream流方式读写数据(字节流)

(二)NIO---同步非阻塞式  JDK1.4前

1、实现模式

   多个请求对应一个线程,客户端连接请求被注册到一个多路复用器Selector上

   Selector轮询连接有IO请求时,才启动一个线程处理

2、适用场景

    连接数目多且连接时间短

3、特点

   同步:线程要不断接收客户端连接并等待IO处理完成后继续执行

  非阻塞:如果一个管道里没有数据,不需一直等待,轮询下一个管道

4、核心组件

 (1)Selector多路复用,轮循检查Channel状态,判断是否处于可读或可写状态

                           将要使用的Channel注册到Selector,并获得一个SelectionKey

                           进而用来获得Channel及Selector信息

 (2)channel双向通道通过Buffer来读写数据,不能直接访问数据

 (3)Buffer:缓冲区,一块可读写的数据内存,用来简化数据的读写

                  三个属性:position-----下次读写数据的位置

                                    limit-------本次读写的极限位置

                                    capacity----最大容量

5、读写数据

    从channel中读数据----相当于向buffer中写数据,调用buffer中flip方法转为读模式

    从channel中写数据----相当于向buffer中读数据,调用buffer中clearcompact方法清空缓冲区

(三)AIO---异步非阻塞式   JDK7

1、实现模式

    一个有效请求对应一个线程

    客户端的IO请求都是由操作系统先完成IO操作后,再通知服务器应用来直接使用准备好的数据

    操作系统完成IO操作期间,服务器可执行其他操作, 而不是等IO请求完成后才开始执行

2、适用场景

     连接数目多且连接时间长的场景

3、特点

  异步:服务端接收到客户端管道后就交给底层处理IO通信,自己可以处理其他事情

非阻塞:客户端有数据就会处理,处理好就通知服务器,而不是等IO操作彻底完成

4、涉及的核心原理

(1)两种实现方式:Future模式和注册CompletionHandler接口

(2) 引入了TCP,和面向流的异步socket channel,表示一个连接。

        [注]传输层:TCP 面向来凝结的传输控制协议

                             UDP 无连接的数据报协议

(3)非阻塞nio框架一般都是采用Reactor模式,Reacot负责事件的注册、select、事件的派发;

        异步IO有个Proactor模式,Proactor负责 CompletionHandler的派发

(4)异步channel的分组管理,目的是为了资源共享。

          一个AsynchronousChannelGroup绑定一个线程池,这个线程池执行两个任务:处理IO事件和派发CompletionHandler

核心原理部分来源:AIO原理_u012515285的博客-CSDN博客_aio实现原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值