Java IO模型

7 篇文章 0 订阅

目录

一.IO中的两组概念

二.Java BIO模型

三.Java NIO模型

 四.Java AIO模型


一.IO中的两组概念

1.阻塞/非阻塞:没有数据传过来时,读会阻塞直到有数据;缓冲区满时,写操作也会阻塞。 非阻塞遇到这些情况,都是直接返回。

2.同步/非同步:数据就绪后需要自己去读是同步,数据就绪后系统直接读好再回调给程序是异步。

二.Java BIO模型

1.BIO概念:(Blocking IO)同步阻塞IO,为每一个请求分配一个线程,IO操作基于流stream操作。

2.线程开销:客户端的并发数与服务端的线程数成1:1的关系,随着并发量变大服务端的性能将显著下降。

3.线程阻塞:连接建立后,如果该线程没有操作,会阻塞,非常浪费服务端资源。

三.Java NIO模型

1.NIO概念:(Non-Block IO)同步非阻塞IO。

2.NIO三大核心组件:Buffer、Channel、Selector(缓冲区、通道、选择器)

(1)Buffer:缓冲区的本质是一个字节数组,在BIO中数据是直接写到stream中,而在NIO中都是写到Buffer中。

(2)Channel:网络数据通过Channel读取和写入,Channel是双向的而流是单向的(InputStream/OutputStream),而且Channel支持同时读写(全双工)。

(3)Selector:Selector不断轮询注册在其上面的Channel,如果某个Channel上面发生读写事件(就绪),就会被Selector轮询出来,再通过selectedKeys获取就绪的Channel集合,进行后续的IO操作。

 四.Java AIO模型

1.AIO概念:(Asynchronous IO)异步非阻塞IO,这里的异步IO是需要依赖于操作系统底层的异步IO实现。

2.AIO基本流程:用户线程通过系统调用,告知kernel内核启动某个IO操作,用户线程返回。kernel内核在整个IO操作(包括 数据准备、数据复制)完成后,通知用户程序,用户执行后续的业务操作。

3.AIO不足:windows下实现成熟,Linux 系统下目前并不完善,所以Linux实现高并发网络编程时都是以 NIO多路复用模型为主。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr Tang

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值