linux IO流程
Linux IO流程:
第一阶段 等待数据准备好(Waiting for the data to be ready)
第二阶段 从内核向进程复制数据(Copying the data from the kernel to the process)
有两次数据拷贝
第一次 DMA从磁盘上读取数据拷贝到内核空间
第二次 数据从内核空间拷贝到用户空间
I/O模型划分为以下五种类型
1.阻塞式I/O模型 对应java中BIO
同步阻塞式IO
第一阶段和第二阶段都是阻塞的
2.非阻塞式I/O模型
当用户发起一次IO操作,系统会立即返回结果,当前线程不阻塞,不停的轮询向系统发起请求,询问数据是否准备完成 类似与Future.get()方法
第一步是非阻塞的 第二步时阻塞的
3.I/O复用模型 对应java中NIO
异步阻塞IO 异步:DMA将数据从硬盘拷贝到内核态是异步的 阻塞:内核态数据拷贝到用户态是阻塞的
与非阻塞式IO不同的地方在于第一个阶段通道可以监听一批请求,不断的轮询,哪一个数据准备好了他就可以返回,然后进行处理
4.信号驱动时I/O
java不支持
每次IO请求会向核态注册一个信息,当内核态数据准备好了会回调通知,但内核态数据到用户态数据拷贝也是阻塞的。
5.异步I/O 对应java中AIO
真正的异步 当数据准备到用户态后再回调