Loading

IO模型简介

IO的概念

IO一般指读与写这两种操作,涉及到数据流的传输与转换。

java将不同的数据源的交互统称为流(stream),根据流向不同分为:输入流、输出流两种。

java传统的流类型统一放在java.io这个包下。

java中流操作的基类

java的输入流主要是InputStream和Reader作为基类,而输出流则是主要由outputStream和Writer作为基类。它们都是一些抽象基类,无法直接创建实例。

根据流的单位不同,划分为字节(8字节)流和字符(16字节)流,字节流对应:InputStream/OutputStream,字符流对应:Reader/Writer。

java流操作带来的好处

java中一个流可以看成一段稳定的水管,一个字节或字符可以看做水管中流动的水滴,配合java中多样的流类型,可以提供稳定可缓存的,简易操作的流功能。

IO的各种模式

IO操作,最少会涉及到两个对象:调起IO的进程 + 系统的内核。

一个IO读操作有两个阶段:

  • 进程等待数据准备
  • 将数据由内核拷贝到进程

为了解决IO耗时的问题,提出多种网络IO模型:阻塞IO模型、非阻塞IO模型、多路复用IO模型、异步IO模型。

阻塞IO模型

进程调起一个IO操作,需要等待系统内核返回数据才会继续进程之后的操作。再内核返回数据之前,进程处于阻塞状态。

非阻塞IO模型

进程调起一个IO操作,立即得到返回结果,如果结果失败,则再次调起访问,直到系统内核返回数据为止。适用于哪些场景?

多路复用IO模型(异步阻塞IO模型)

多路IO复用,也可称为事件驱动IO(Reactor设计模式),原理是有个函数不断轮询Socket,当某个Stocket有数据返回了,就通知进程中的调用方进行处理,该模式主要适用于多个连接调用,对其中一个进程调用来说,跟阻塞IO模式没有区别。

异步IO模型

异步IO,其实就是进程调用会立刻得到结果返回,进程可以继续往下执行,当系统内核准备好数据后,通知进程,进程再处理数据。

IO在网络传输中的应用(待补充)

posted @ 2022-01-11 08:40  逝zxq  阅读(142)  评论(0编辑  收藏  举报