IO基础之JAVA IO演进之路

echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!


参考文章:https://blog.****.net/weixin_33725239/article/details/92381273

JAVA IO是什么?

在JAVA中I/O是以流为基础进行数据的输入输出操作,I最典型的代表有:InputStream,O最典型的代表有:outputStream。所有的数据被串行化写入流,并输出就是我们的IO操作,通俗一点讲就是将数据以流的方式从磁盘读到内存,或者将数据从内存写入磁盘。

IO分为两种

  • 阻塞式
  • 非阻塞式

阻塞式模型

IO基础之JAVA IO演进之路

非阻塞式模型

IO基础之JAVA IO演进之路

IO开始演进,异步IO

异步IO比较简单,可以基于我们上面的图去理解,拿第一个图来说,如果我们调用了数据,数据没有准备好,先直接返回无数据,但是程序继续执行获取数据,当我们数据准备完毕,直接返回我们拿到的数据给调用端

IO演进,多路复用

我们的IO如果有多个客户端接入请求,多路复用技术通过把多个IO的阻塞复用到同一个select是的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端的请求。

IO的发展史(参考文章网络文章)

IO的完善

IO的发展也类似,起初(jdk1.4之前)IO提供了字节流和字符流,但设计都是线程阻塞的,效率非常低下,jdk1.4开始对IO进行了改革,推出了同步非阻塞IO, 提供了 Channel、Selector、Buffer新的抽象,读写效率得到了提高。2011年,jdk1.7发布,AIO的出现,标志着IO的操作又进入一个新阶段。

BIO的出现

BIO(Blocking I/O):同步阻塞IO模式,数据读取或写入必须阻塞在一个线程内完成。 【以下摘自知乎:在此种方式下,用户进程在发起一个 IO 操作以后,必须等待 IO 操作的完成,只有当真正完成了 IO 操作以后,用户进程才能运行。 】

NIO的出现

NIO(New I/O):支持同步阻塞和非阻塞IO模式。同步非阻塞:【以下摘自知乎: 在此种方式下,用户进程发起一个 IO 操作以后 边可 返回做其它事情,但是用户进程需要时不时的询问 IO 操作是否就绪,这就要求用户进程不停的去询问,从而引入不必要的 CPU 资源浪费。 】

AIO的出现

AIO( Asynchronous I/O ): 异步非阻塞I/O模型(知乎中有人说java实现的不是异步非阻塞,而是异步阻塞,这里需要进一步考证)。 异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会阻塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。


做一个有底线的博客主