Java IO模型

本文详细介绍了Java中的三种IO模型:BIO(阻塞IO)、NIO(非阻塞IO)和AIO(异步IO)。BIO在请求后线程会阻塞等待,而NIO引入了缓冲区和选择器,实现多路复用,允许一个线程处理多个连接。AIO进一步提升了效率,通过异步通知机制,应用程序无需等待数据准备即可执行其他任务。理解这些IO模型对于优化Java应用性能至关重要。
摘要由CSDN通过智能技术生成

Java IO模型

​   IO即input,out,也就是输入输出。java中的IO模型主要有BIO,BIO,AIO三种。

BIO(Blocking I/O)

  BIO顾名思义阻塞型IO。运行模型为 :应用程序发出IO请求,操作系统响应请求,准备数据,拷贝数据,请求结束。

img

  这种方式存在的问题在应用程序发出IO请求之后,不知道操作系统什么时候可以完成请求操作,为保证请求总传递过来的数据流能够接收到,应用程序在发出IO请求后时刻等待着,也就是线程阻塞等待。等到请求完成后,线程才可以执行其他操作。

  为此,在数据流之间添加一个缓冲区,当内核数据准备好之后可以先将数据传送到缓冲区中,这样数据就不会丢失,应用程序也就可以进行其他操作,这种思想也就是接下来的NIO

NIO(Non-blocking/New I/O)

  NIO即非阻塞型IO,在数据流中添加了缓存区,但存在的问题是应用程序如何读取其中的数据呢,这其中提供了一个chanel通道,数据可通过chanel流向应用程序。

  怎么读取缓冲区的问题解决了,什么时候进行读取缓冲区,于是就有一个selector选择器。selet选择器可以实时监听缓存区中数据是否需要读取。

  那为什么叫做selector?原因在于NIO采用了IO多路复用,也就是一个select可以监听多个缓冲区,这种场景非常类似于聊天中的接收消息。一个人用户可以同时和多个用户进行聊天,每一个用户发送的消息都可以看作是一个缓冲区中的数据,select看作消息提示界面,检查缓冲区中有没有数据,用户发现有消息就点击消息进去消息读取界面也就是IO数据读取。

  基于上面描述,就有了新的IO模型

img

  值得注意的是,NIO添加了缓冲区,这就促使与BIO一次读取数据的大小不同,NIO基于缓冲区块为单位,BIO基于字节或者字符为单位。

AIO

  AIO 也就是 NIO 2,即异步型IO,这种工作方式类似于操作系统中的中断的工作方式。发出IO请求,操作系统内核接收到之后回复收到,然后就去准备数据,处理数据,这个时候应用程序就可以去执行其他任务。当内核准备好数据的时候,就去通知应用程序数据好了,应用程序就去接收数据。IO模型如下

img

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值