一文读懂:Java开发中的I/O模型原理解析

 黑马视频号 

今天,播妞给大家带来的是,Java开发中的I/O模型原理解析。I/O是 input/output的缩写即输入输出端口。每个设备都会有一个专用的I/O地址用来处理自己的输入输出信息。

常见的五种IO模型分别是:

阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO。

接下来我们具体了解Java 开发中的I/O模型:

1、BIO(Blocking IO)

BIO是同步阻塞模型一个客户端连接对应一个处理线程。在BIO中accept和read方法都是阻塞操作,如果没有连接请求accept方法阻塞;如果无数据可读取read方法阻塞。

2、NIO(Non Blocking IO)

NIO是同步非阻塞模型服务端的一个线程可以处理多个请求,客户端发送的连接请求注册在多路复用器Selector上服务端线程通过轮询多路复用器查看是否有IO请求有则进行处理。

 NIO的三大核心组件 

(1)Buffer:用于存储数据底层基于数组实现,针对8种基本类型提供了对应的缓冲区类。

(2)Channel:用于进行数据传输面向缓冲区进行操作支持双向传输,数据可以从Channel读取到Buffer中也可以从Buffer写到Channel中。

(3)Selector:选择器当向一个Selector中注册Channel后,Selector 内部的机制就可以自动不断地查询(Select)这些注册的Channel是否有已就绪的 I/O 事件(例如可读,可写,网络连接完成等),这样程序就可以很简单地使用一个线程高效地管理多个Channel也可以说管理多个网络连接,因此Selector也被称为多路复用器。

当某个Channel上面发生了读或者写事件,这个Channel就处于就绪状态,会被Selector监听到,然后通过SelectionKeys可以获取就绪Channel的集合进行后续的I/O操作。

Epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,获取事件的时候它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。

3、AIO(NIO 2.0)

AIO是异步非阻塞模型一般用于连接数较多且连接时间较长的应用,在读写事件完成后由回调服务去通知程序启动线程进行处理。与NIO不同,当进行读写操作时只需直接调用read或write方法即可。

这两种方法均为异步的对于读操作而言,当有流可读取时操作系统会将可读的流传入read方法的缓冲区并通知应用程序;对于写操作而言当操作系统将write方法传递的流写入完毕时操作系统主动通知应用程序。

可以理解为read/write方法都是异步的完成后会主动调用回调函数。

 播妞好课推荐 

黑马程序员

累计培养 30余万名 优质IT人才

以高品质教学质量赢得好口碑

基础班优惠价格 28 元

????????????

JavaEE基础班

学习目标:

1.掌握Java开发环境基本配置;

2.掌握运算符、表达式、流程控制语句、数组等的使用;

3.熟练使用IDEA开发工具;

4.掌握Java基本面向对象知识;

5.掌握常用类String、ArrayList等的使用;

6.掌握学生管理系统编写.

主要内容:

• Java基础语法• 面向对象基础• API基础• 集合基础

可解决的现实问题:

基础语法是学习任何编程语言的第一课,学好基础语法,才能更好的学习后面的课程知识点。

可掌握的核心能力

• 掌握Java开发环境基本配置 • 掌握运算符、表达式、流程控制语句、数组等的使用 • 熟练使用IDEA开发工具 • 掌握Java基本面向对象知识 •掌握常用类String、ArrayList等的使用 •掌握学生管理系统编写

Java 14 天基础班课程

现在报名只需28元

立即扫码咨询

· 推荐阅读 ·

20k+的offer都招不到人,这种人被「疯抢」成啥样了?

2021-05-14

毕业一年,月薪3K到1.7W,这届年轻人赚钱的方式有点野!

2021-05-13

InvoZone发布:2021年,薪酬最高的5种编程语言

2021-05-12

点个在看,播妞爱你们呦

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值