Java I/O模型

目录

一、介绍I/O

二、Java中常见的I/O

1.BIO,同步阻塞IO

2.NIO,同步非阻塞IO

3.AIO,异步I/O

三、三种IO的区别

 


一、介绍I/O

1.I/O(Input/Output)的即为输入输出。

2.从计算机的角度来看:在冯诺伊曼体系中,计算机结构分为:运算器控制器存储器输入设备输出设备I/O描述了外部设备和内部设备的通信。从应用程序的角度来看,一个进程为了保证稳定性和安全性,将地址空间划分为用户空间和内核空间我们平常运行的应用程序都是在用户空间上,内核空间处理系统态级别的资源操作,入文件操作、进程通信、内存管理等等。所以说想要进行I/O需要依赖内核空间的能力

Java I/O模型_第1张图片

3.我们平常进行开发的过程中,最常接触的就是磁盘I/O和网络I/O。在应用程序的视角看,应用程序对操作系统内核发起I/O调用操作系统负责执行具体的I/O操作

二、Java中常见的I/O

1.BIO,同步阻塞IO

这种I/O操作的缺陷很明显,只能处理客户端连接量不多的情况当客户端连接量达到万级别的时候传统BIO模型是无能为力的

Java I/O模型_第2张图片

2.NIO,同步非阻塞IO

1.这种I/O方式执行过程中,应用程序会不断给操作系统内核发送I/O调用read),这段时间内线程依然是阻塞的等内核空间将将数据返回到用户空间。同时缺陷也很明显,应用程序不断调用IO询问数据返回的过程是非常耗费CPU资源的。

Java I/O模型_第3张图片

 2.这个时候I/O多路复用就发挥了作用,线程首先发起select调用询问内核是否准备好数据等内核将数据准备就绪时用户线程在发起read调用read调用过程的过程数据从内核空间->用户空间还是阻塞的

Java I/O模型_第4张图片

I/O多路复用,通过减少对内核的无效调用,减少了对CPU的占用。 

3.在NIO当中,有一个非常重要的概念就是选择期selector),也称为多路复用器通过他只需一个线程就能连接管理多个客户端

3.AIO,异步I/O

1.异步IO是基于事件的回调机制实现的,也就是应用程序操作完成之后不会阻塞在原地而是当后台处理完成后操作系统会通知相应的线程进行后续操作。

Java I/O模型_第5张图片

三、三种IO的区别

Java I/O模型_第6张图片

 

 

 

 

你可能感兴趣的:(java,开发语言)