五大IO模型

五大IO模型

我们都知道Java中提供了三大IO模型,BIO,NIO,AIO,这三大IO模型都是基于操作系统的IO模型工作的,接下来我们仔细聊一下操作系统的IO模型

1. IO

怎么样的操作被称为一次IO呢?

简单来讲:一次IO就是将数据从硬盘中加载到内存中

2. 阻塞IO

线程一直等待数据,数据没有完全加载到内存的期间,线程处于阻塞状态;直到数据完成拷贝以后,线程才结束阻塞状态

底层实现:

3.

**缺点:**线程阻塞,浪费CPU资源

3. 非阻塞IO

线程不会一直等待,而是通过轮训的方式查看数据有没有准备好。需要一直注意数据的状态

底层实现:

**缺点:**需要一直关注数据的状态,线程不能做其他的事情

4. 信号驱动IO

线程不会注意数据状态,当数据复制完成以后,会发送一个信号量,告知数据已经准备就绪,可以进行处理

底层实现

5. 多路复用IO

通过建立多个通道,来实现可以IO复用。通过建立一个选择器,实现处理不同通道中的数据。即javaNIO的实现

底层原理:维护了一个选择器,调用Select选择器寻找数据已经就绪的通道,执行recvfrom进行复制;如果没有通道就绪,select线程阻塞

以上四种IO都是同步IO,下面介绍一种异步IO即java中的AIO

6. 异步IO

当前进程发送一个请求,系统准备好所有的数据,并且将数据复制到用户空间中,然后去通知进程执行其他的事情。

事件回调机制

7. 五种模型的比较