io多路复用的原理和实现_Linux系统IO模型

1776e46851eaf8f7f96787b7d88a9aba.png

五大IO模型

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

1. IO

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

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

2. 阻塞IO

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

底层实现:

eccb9e9b7b64bf3a70163709fc994115.png

3.

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

3. 非阻塞IO

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

底层实现:

675ce7fdf3224b410a297303ac77fadd.png

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

4. 信号驱动IO

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

底层实现

f24def850f2559ddab10cc6754391777.png

5. 多路复用IO

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

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

3f7f56f4908749ca80e9b2de3c3a03f2.png

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

6. 异步IO

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

事件回调机制

7. 五种模型的比较

26a630651a8c8d2fc5a6c30a9c829b89.png

参考文章:

漫话:如何给女朋友解释什么是Linux的五种IO模型?BIO,NIO,AIO 总结

往期推荐

5000字长文带你入门JVM​mp.weixin.qq.com voliatile关键字你了解吗?​mp.weixin.qq.com Lock和Synchronized锁原理​mp.weixin.qq.com 集合安全类​mp.weixin.qq.com 你想知道的SQL优化的四大方法​mp.weixin.qq.com SpringBoot自定义错误信息原理​mp.weixin.qq.com 你了解线程池吗?​mp.weixin.qq.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值