javaIO模型

IO模型

用户读取请求 申请系统调用 系统执行请求(从硬盘dma拷贝到系统缓冲区,再从系统缓冲区cpu拷贝到用户缓冲区)

发送请求 申请系统调用 系统执行请求(从用户缓冲区cpu拷贝到socket缓冲区,再从sokcet缓冲区dma拷贝到网卡)

用户态调用请求 等着返回结果 叫做阻塞

用户态调用请求 不等着返回结果 去干其他事 叫做非阻塞

内核态执行请求 等着返回结果 叫做同步

内核态执行请求 不等着返回结果 去干其他事 叫做非同步

所以 IO模型 主要分为 BIO 同步阻塞IO NIO 同步非阻塞IO AIO 非同步非阻塞IO

NIO早期模式是通过用户态一直轮询问内核态“数据准备好没有,数据准备好没有”,这是一个很耗性能的过程,很蠢

所以 有了 IO多路复用,将用户态的轮询转移到了内核态(即内核一直问硬盘,数据准备好了没有,数据准备好了没有),本质上是阻塞一个线程,以实现其他线程的非阻塞。

举个例子就是,你和朋友们去吃饭,你的朋友每人点了一个菜,你朋友们就去玩了,等你A朋友的菜端上来的时候,你就A打电话,B的菜上来了,你就给B打电话,然后你和你的朋友们就一起顺利吃了饭。

“你”就是selector,你的朋友们的电话,就是selector维护的列表。打电话这个行为是基于Reactor模型

java的NIO是对IO多路复用的具体实现

netty就是NIO模型IO多路复用模式的java版的具体实现

以上是我的理解,有不对或者不清楚的地方 请评论区大佬多多指教!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值