五大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. 五种模型的比较
参考文章:
漫话:如何给女朋友解释什么是Linux的五种IO模型?BIO,NIO,AIO 总结