文章目录
IO 发展历程(BIO、NIO、AIO)
一、包含的知识点
- IO基本概念
- 阻塞(Block)和非阻塞(Non-Block)
- 同步(Synchronization)和异步(Asynchronous)
- BIO和NIO对比
- AIO基本原理
二、IO相关的基本概念
2.1 阻塞(Block)和非阻塞(Non-Block)
阻塞和非阻塞是进程进行数据访问时, 如果数据没有准备好时的一种处理方式
阻塞: 需要等待缓冲区中的数据准备好后才处理其它事情, 否则一直等待
非阻塞: 当进程访问缓冲区中的数据, 如果数据没有准备好直接返回, 不会等待
2.2 同步(Synchronization)和异步(Asynchronous)
同步和异步是根据**应用程序和操作系统**交互方式来确定的
-
同步方式: 应用程序需要直接参与IO读写操作 , 处理IO的时候, 会阻塞到read、write方法上面, 等待IO事件完成, 这个时候不能处理其它事情, 只能等待IO事件完成;
-
异步方式: 应用程序不需要参与, 所有的IO读写都交给操作系统, 应用程序可以处理其它, 并不需要同步等待IO完成, 只需操作系统完成后给应用程序一个通知。
三、BIO和NIO对比
3.1 面向流(Stream)和面向缓冲区(Buffer)
- 面向流: BIO是面向流的, 意味着每次从流中读取一个或多个字节,直至读取所有字节, 并没有对数据进行缓存, 也不能前后移动流中的数据。
- 面向缓存: NIO是面向缓存区的, 程序可以在缓存区中前后移动, 增加了处理过程的灵活性, 但是同时也带来了复杂性
- 需要检查缓冲区中是否包含了所有需要的数据
- 需要确保更多数据读入缓冲区时, 不能覆盖尚未处理的数据
3.2 通道(Channel)
Channel是通信载体, 它和流有些像, 但是有几点区别
- 通道可以读也可以写, 是双向的, 流一般是单向的,只能读或写
- 通道可以异步读写, 流只能阻塞读写
- 通道是基于Buffe