您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

I/O分类和作用

目录

  • I/O作用
  • I/O分类
  • JAVA I/0 分类(BIO)
  • JDK 1.4 引入Nio包和原来IO区别
  • NIO中三个核心组件-channel、buffer、selctor
    • NIO包中常见的channel
    • 缓冲区
    • 选择器selector
  • AIO模型

I/O作用

在这里插入图片描述
I/O通信指的是将数据从数据源传输到接收端。

I/O分类

在这里插入图片描述

JAVA I/0 分类(BIO)

在这里插入图片描述
在这里插入图片描述

JDK 1.4 引入Nio包和原来IO区别

IO和NIO读取数据方式流程
在这里插入图片描述
IO和NIO读取数据原理图
在这里插入图片描述
IO和NIO模型对比
在这里插入图片描述
NIO从channel向buffer中读取数据时,当数据没有准备好的时候,线程并没有阻塞,而是采用轮询的方式检查数据是否准备好,准备好则从channel中读取数据。NIO缺点是:由于将数据从channel读取到buffer中的时机无法确定,所以要不断从buffer中获取数据,看自己需要的数据全部加入到缓存区中
BIO使用场景: 单个连接的带宽很大,需要传输大量的数据,例如文件上传/下载。
NIO使用场景: 服务器需要同时管理数千个连接,每个链接的数据量很少,例如聊天系统。

NIO中三个核心组件-channel、buffer、selctor

NIO包中常见的channel

FileChannel :读取文件的channel
DatagramChannel:通过UDP协议读取网络中的信号
SocketChannel:通过TCP读取网络中的传输的信息
ServerSocketChannel:服务器为每个连接的客户端建立一个channel

缓冲区

和通道直接相连的是缓冲区,缓冲区连接了数据源和接收端之间的通道。缓冲区的作用可以理解为仓库,商家下单时不用等待,厂商可以直接将仓库做好的鞋子发给商家,然后再对仓库进行补充。在I/O中,数据源提前准备好一部分数据放在缓冲区,接收端有I/O请求时,直接从缓冲区取数据,减少了阻塞等待的时间。
从缓冲区Buffer中读取数据和向缓冲区写数据的过程
在这里插入图片描述
上图页解析了NIO可以进行双向读写,而单个BIO链接只能读或只能写。

选择器selector

Seletor作用是多个channel注册到selector中,selector为线程选择可以进行输入的channel,其中一个线程处理多个连接的方式称为多路复用(mutiplexing),多路指多个连接,复用同一个线程,实现方式有三种。
1、select:使用轮询方式查询注册到Selector中就绪的文件连接,连接数(x86-1024,x64-2048)。
2、poll:也是采用轮询方式,连接数使用链表实现。
3、epoll:采用回调方式实现。
其中epoll的实现采用了事件驱动模型,将每个连接实例作为一个请求,事件驱动模型在UI应用广发应用。其中Reactor是事件驱动模型的一种实现,Reactor模型主要由Reactor、acceptor和handler三部分组成。
Reactor: 相应所有io请求,可以有多个.
acceptor: 建立连接,只有一个。
handler: 有多个。
Reacotr有三种模型,第一种是单Reactor+处理handler的线程有一个。
在这里插入图片描述
应用场景:redis线程模型,javaNIO线程模型。
在这里插入图片描述
应用场景:tomcat线程模型,缺点是当同一时间请求非常多是,主线程处理所有网络事件,例如accptor建立连接阻塞,可能造成阻塞。
第三种,主从reactor+多线程处理handler
在这里插入图片描述
Nginx和netty中模型,将处理后的数据返回给客户端也交有subreactor执行。

AIO模型

在这里插入图片描述

NIO模型中非阻塞指的是读取I/O操作是非阻塞的,但是在处理期间,客户端对服务器请求依然保持连接,客户端会同步阻塞等待服务器的相应。AIO是将请求注册到服务器操作系统中,客户端随后就会处理自己的事情,等处理完毕,操作系统通知客户端响应数据准备完毕。真正实现了异步I/O请求。


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进