五种I/O:BIO、NIO、AIO、IO多路复用、信号驱动IO

1、IO简介

	我们都知道,为了保证计算机系统的安全,执行不同的命令。程序执行时,会分为用户态和内核态。在用户态和内核态进行交互IO时,处理交互事件的模型有五种:
	1.阻塞I/O(NIO)  2.非阻塞式IO(NIO)    3.IO多路复用  4.信号驱动IO     5.全异步IO(AIO)

2、五种IO的详细介绍

2.1 阻塞I/O

当程序需要进行I/O 操作(比如读取网卡上的信息),阻塞I/O时: 用户线程请求内核线程,内核态线程去读取磁盘上的数据。在内核态读取磁盘信息的期间,用户线程一直等待内核线程,直到内核态线程读取完磁盘数据,返回给用户态线程。

2.2 非阻塞I/O

当程序需要进行I/O 操作(比如读取网卡上的信息),非阻塞I/O时:用户线程请求内核线程,内核线程去读取磁盘上的数据。在内核线程读取磁盘信息的期间,用户线程循环去访问内核线程是否读取完磁盘数据,直到内核线程读取完磁盘数据,返回给用户线程。

2.3 IO多路复用

当程序需要进行I/O 操作(比如读取网卡上的信息),IO多路复用时:用户线程请求selector线程,selector线程请求内核态线程,内核线程去读取磁盘上的数据。在内核线程读取磁盘信息的期间,selector线程循环去访问内核线程是否读取完磁盘数据,直到内核线程读取完磁盘数据,返回给selector线程,selector 线程再去请求对应读取事件的用户线程。

2.4 信号驱动IO

当程序需要进行I/O 操作(比如读取网卡上的信息),信号驱动IO时:用户线程请求内核线程,内核线程记录请求用户线程,用户线程返回,内核线程继续去读取磁盘上的数据。在内核线程读取磁盘信息的期间,用户线程处理自己需要处理的事情,直到内核线程读取完磁盘数据,内核线程发信号给用户线程,用户线程被激活,进行数据拷贝。

2.5 全异步IO(AIO)

当程序需要进行I/O 操作(比如读取网卡上的信息),全异步IO时:用户线程请求内核线程,内核线程返回,内核线程继续去读取磁盘上的数据。在内核线程读取磁盘信息的期间,用户线程处理自己需要处理的事情,直到内核线程读取完磁盘数据,然后内核线程把数据拷贝到用户空间。 全程没有阻塞,而信号驱动IO和 多路复用IO 在数据准备好时,都会通知用户线程去从内核空间拷贝数据,从而会阻塞用户线程。

你可能感兴趣的:(java)