❝我们都知道Java中提供了三大IO模型,
BIO,NIO,AIO
,这三大IO模型都是基于操作系统的IO模型工作的,接下来我们仔细聊一下操作系统的IO模型 ❞
怎么样的操作被称为一次IO呢?
「简单来讲:一次IO就是将数据从硬盘中加载到内存中」
「线程一直等待数据,数据没有完全加载到内存的期间,线程处于阻塞状态;直到数据完成拷贝以后,线程才结束阻塞状态」
「底层实现:」
3.
缺点:线程阻塞,浪费CPU资源
线程不会一直等待,而是通过轮训的方式查看数据有没有准备好。「需要一直注意数据的状态」
「底层实现:」
缺点:需要一直关注数据的状态,线程不能做其他的事情
线程不会注意数据状态,当数据复制完成以后,会发送一个信号量,告知数据已经准备就绪,可以进行处理
「底层实现」
通过建立多个通道,来实现可以IO复用。通过建立一个选择器,实现处理不同通道中的数据。即javaNIO
的实现
「底层原理」:维护了一个选择器,调用Select
选择器寻找数据已经就绪的通道,执行recvfrom
进行复制;如果没有通道就绪,select
线程阻塞
「以上四种IO都是同步IO,下面介绍一种异步IO即java中的AIO
」
当前进程发送一个请求,系统准备好所有的数据,并且将数据复制到用户空间中,然后去通知进程执行其他的事情。
「事件回调机制」
漫话:如何给女朋友解释什么是Linux的五种IO模型? BIO,NIO,AIO 总结