在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
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方法都是异步的完成后会主动调用回调函数。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java参数传递方式问题 干货解答
我们都知道,按值传递和引用传递是Java的两种方法参数传递方式。本文将针对按值传递和引用传递分别是什么,没有改变对象的值的原因等一系列问题,进行解答。
6857
2019-08-08 17:55:02
Java基础语法之注解学习笔记
在学习Java基础语法的时候,初学者常常会分不清注解与注释的区别。其实注解和注释是完全不一样的两个概念。简单来讲,注释就是方便自己或他人阅读代码,对编程思路或程序作用的解释说明。而注解则是代码里的特殊标记,是给编译器阅读的元数据。本文将为大家详细讲解一下Java基础语法中有关注解的相关知识点,需要学习的小伙伴可以跟着文章一起来梳理一遍知识点。
5052
2020-01-06 16:53:17
浅谈学习Java需要有哪些基础?
浅谈学习Java需要有哪些基础?对于一个没有接触过编程语言的人来说,一点学习经验都没有,突然想要学习一门Java语言来作为自己的生存技能,就会问学习Java需要具有哪些基础?该如何学习呢?
5339
2020-02-14 17:46:12
Java基础入门数组学习笔记
众所周知,数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。要想入门Java,数组是一个必须好好学习的基础知识点。本文为广大Java基础入门初学者归纳总结了数组的学习笔记,下面一起来看看吧~
3844
2020-05-25 15:33:04
什么是Java运算?Java运算:比九九乘法表还简单
提到运算,你可能会立即想到加、减、乘、除四则运算以及“九九乘法表”。Java 语言中有很多进行数据运算的方式,比如:算术运算、比较运算、逻辑运算、赋值运算、三目运算等。每一种运算方式,又都包含了很多的运算符,小编把这些运算符形象的称为“十八般武艺”,学习 Java 中的运算,就是学习这些运算符的使用,也就是修炼这“十八般武艺”的过程。
3409
2021-07-15 15:16:23