JAVA-NIO学习之I/O选择与控制方式

前言

迎着最近闲暇时间,看了一些关于java nio方面的博客和书籍资料,现在做一些系列总结。

首先在了解NIO之前,先温故下I/O选择方式,因为只有了解这些,才明白出现通道和缓冲区的原因

I/O选择方式

1. 程序I/O方式

特点

CPU要不断地测试I/O设备的状态,没有中断机构,使I/O设备无法向CPU报告它已经完成了一个字符的输入操作。

问题

CPU的高速性能和I/O的低速性能,使CPU绝大部分时间都在等待I/O设备返回消息,这样就造成了CPU的极大浪费。

2. 中断驱动程序I/O方式
特点
  • I/O设备在进行传输时无需
  • 仅当传输一个数据时,CPU才花费极短的时间去做些中断处理
  • CPU和I/O设备都处于忙碌状态,从而提高了整个系统的资源利用率及吞吐量
问题

由于中断驱动程序的传输单元为一个数据,传输完毕之后依旧需要CPU进行中断处理,依旧花费很多时间,所以引入了DMA传输方式

3. 直接存储器访问(DMA)I/O控制方式

特点
  • 数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传送至少一个数据块
  • 数据传送是从设备直接送入内存的,或者相反
  • 仅仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在控制器的控制下完成。

附上各个流程图片:

JAVA-NIO学习之I/O选择与控制方式_第1张图片
222.png

由于DMA传输方式采用一个或多个数据块的开始和结束,才需CPU干预,整块数据的传送是在控制器的控制下完成,有效解决了中断驱动程序I/O方式的每个数据传输,都需要CPU进行中断处理的机制。

I/O通道控制方式

I/O通道方式是DMA方式的发展,它可进一步减少CPU的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预。

接下来总结下I/O方式缓冲区的概念及其要点。

你可能感兴趣的:(JAVA-NIO学习之I/O选择与控制方式)