JAVA中三种I/O框架——BIO、NIO、AIO

一、BIO(Blocking I/O)

BIO,同步阻塞IO模型,应用程序发起系统调用后会一直等待数据的请求,直至内核从磁盘获取到数据并拷贝到用户空间;

在一般的场景中,多线程模型下的BIO是成本较低、收益较高的方式。但是,如果在高并发的场景下,过多的创建线程,会严重占据系统资源,降低系统对外界响应效率。即使使用线程池,只能一定程度上缓解了频繁调用IO接口带来的资源占用。

二、NIO(Non-Blocking/New I/O)

NIO,JAVA中与JDK1.4引入该IO模型,但不要简单的理解为同步非阻塞,JAVA中的NIO实际上可以看作IO多路复用模型,下面简单介绍下这两种I/O模型。

2.1 同步非阻塞模型

应用程序向内核发起请求后,即使kernel没有从磁盘中取到数据,也会返回一个结果给用户,用户判断结果正确性,如果不是需要的数据,则后续继续发起请求,即轮询请求,直至kernel取到数据并返回。

采用轮询方式,会导致系统上下文切换开销很大,会大幅度推高CPU占用率。

2.2 IO多路复用模型

Java 中的 NIO ,有一个非常重要的选择器 ( Selector ) 的概念,也可以被称为 多路复用器。通过它,只需要一个线程便可以管理多个客户端连接。当客户端数据到了之后,才会为其服务。线程首先发起 select 调用,询问内核数据是否准备就绪,等内核把数据准备好了,用户线程再发起 read 调用。

IO 多路复用模型,通过减少无效的系统调用,减少了对 CPU 资源的消耗,解决了同步阻塞I/O和同步非阻塞I/O的问题,是一种非常高效的I/O模型。

三、AIO(Asynchronous I/O)

AIO,异步IO模型,也叫NIO2,JAVA7中引入,异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

四、几种常见IO模型的对比

图片来自【美团技术团队】https://tech.meituan.com/2016/11/04/nio.html ,其中也详细阐述了NIO模型,可前往学习。

相关推荐
都叫我大帅哥16 小时前
Java JJWT 完全指南:从入门到生产级实践
java
前端开发张小七17 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
ThsPool18 小时前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript
赤壁小虾19 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
青山木20 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
Jul1en_20 小时前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程
摇滚侠20 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 管理 Spring Boot 应用 阅读笔记
java·spring boot·笔记
XWalnut20 小时前
SpringBoot快速入门
java·spring boot·后端
前端 贾公子20 小时前
第06章:结构化输出 (上)
java·服务器·前端
念何架构之路20 小时前
restartmanager-重启管理子系统
java·开发语言