当前位置: 首页 > news >正文

阻塞 IO为什么叫BIO,非阻塞IO为什么叫NIO,异步IO为什么叫AIO

IO

IO的核心就是数据传输,也就是程序与外部设备之间进行传输,通过IO的核心可以分为,

文件IO和网络IO

文件IO交互的对象就是本地存储设备,比方说读写本地文件。

网络IO交互的对象就是网络设备,核心的应用场景就是网络通信。

按照操作方式来进行划分:同步IO和异步IO

同步IO核心逻辑是指调用者发起IO请求之后必须等待IO操作完全完成,才能继续执行,缺点就是效率低,应用场景大部分简单业务。

异步IO调用者发起IO请求后,无需等待,直接返回,IO完成后内核通知告知调用者和。缺点就是逻辑复杂,需要进行通知处理,应用在高并发场景。

按照内核是否拷贝数据分:阻塞IO和非阻塞IO。

阻塞IO核心逻辑是发起请求之后内核若数据未准备好,会让调用者阻塞,直到数据准备好并完成拷贝,才会叫醒调用者。

非阻塞IO:核心逻辑是调用者发起请求后,内核数据未准备好,会立即返回未就绪状态,调用者需要通过轮询进行反复的查找,确认数据是否准备好

经典IO模型

1. BIO - Blocking I/O (阻塞 I/O)

  • 为什么叫“BIO”?
    因为它代表 Blocking I/O。在 Java 1.4 之前,只有一套原始的 I/O API(java.io 包,如 InputStreamOutputStreamServerSocketSocket)。这套 API 的核心特征就是 阻塞

  • “阻塞”体现在哪里?
    当线程调用 read() 或 accept() 等方法时,线程会被挂起,直到数据准备好或连接建立成功。在此期间,这个线程什么也干不了,就像被“阻塞”住了一样。

  • 设计模式
    通常采用 “一个连接一个线程” 的模型。当并发连接数很高时,需要创建大量线程,而线程上下文切换的开销巨大,会耗尽系统资源。

结论:BIO 是以其最核心的特征——Blocking(阻塞)——来命名的。


2. NIO - New I/O / Non-blocking I/O (新的 I/O / 非阻塞 I/O)

  • 为什么叫“NIO”?
    这个名字有双重含义

    1. 字面意思:New I/O。因为在 Java 1.4 中,它是一套全新的 I/O API(java.nio 包),旨在解决 BIO 的性能瓶颈。

    2. 核心特性:Non-blocking I/O。这是这套新 API 最引人注目的特性之一。它提供了非阻塞的工作模式。

  • “非阻塞”体现在哪里?
    线程可以向通道(Channel)发起一个读请求,如果当时没有数据可用,线程不会被挂起,而是立刻得到一个返回结果(比如返回 0),然后这个线程可以马上去处理其他通道的请求。

  • 核心机制
    它的非阻塞能力是建立在 I/O 多路复用 机制之上的(通过 Selector 实现)。一个线程可以轮询多个通道(Channel),看哪些已经就绪,然后只对那些就绪的通道进行实际的 I/O 操作。这才是它能够用少量线程处理大量连接的关键。

结论:NIO 的名字既代表了它是“新”的 API,也强调了其“非阻塞”的核心特性。


3. AIO - Asynchronous I/O (异步 I/O)

  • 为什么叫“AIO”?
    因为它代表 Asynchronous I/O。这是在 Java 7 中引入的,更加强大和彻底的异步 I/O 模型。

  • “异步”体现在哪里?
    它与“非阻塞”有本质区别:

    • NIO (Non-blocking): 是 同步的。你需要不断地主动去问(轮询)数据好了没有,然后自己去拷贝数据。

    • AIO (Asynchronous): 是 真正异步的。你只需要发起一个 I/O 操作(如 read),并提供一个回调函数。当内核完成所有工作(包括数据准备和从内核空间拷贝到用户空间)后,会主动通知你,并调用你提供的回调函数。

    整个过程,应用程序线程完全不需要参与,可以继续执行其他逻辑。

  • 实现
    在 Java 中,AIO 的相关类在 java.nio.channels 包下,主要以 AsynchronousSocketChannelAsynchronousServerSocketChannel 和 CompletionHandler 为核心。

结论:AIO 的名字准确地描述了其“异步”的本质特征,即“你叫我,我来做,做好了回调告诉你”。

缩写全称中文核心特征模型比喻
BIOBlocking I/O阻塞式 I/O调用会阻塞线程同步阻塞同步排队:在餐厅点餐后,必须站在柜台前傻等,直到餐做好。
NIONew I/O Non-blocking I/O新的 I/O 非阻塞 I/O调用不会阻塞线程同步非阻塞 (I/O多路复用)异步排队:点餐后拿个号,你可以去玩手机,但需要不时抬头看屏幕是否叫到你的号,然后自己去取
AIOAsynchronous I/O异步 I/O由系统完成后回调异步非阻塞外卖手机下单后就不用管了,外卖小哥会直接送到你手上,并通知你。

“BIO 和 NIO 的命名主要源于 Java API 的演进。BIO 代表 Blocking I/O,强调了其阻塞的特性。NIO 既是 New I/O(一套新的 API),也代表了 Non-blocking I/O(其核心特性之一)。而 AIO 则明确代表了 Asynchronous I/O,即异步 I/O 模型,这是从它们最根本的行为特征来命名的。”


文章转载自:

http://zRxdfMVU.yfrbn.cn
http://sOJSNiQV.yfrbn.cn
http://ZeowylKh.yfrbn.cn
http://B3waV5FQ.yfrbn.cn
http://MB75cv5H.yfrbn.cn
http://f6ZpPYre.yfrbn.cn
http://z6vC3ARP.yfrbn.cn
http://JUijfEty.yfrbn.cn
http://kEyrgPve.yfrbn.cn
http://vCMSibnu.yfrbn.cn
http://JaImo4M3.yfrbn.cn
http://plS7WNYJ.yfrbn.cn
http://3SakyKR0.yfrbn.cn
http://JWu14SC6.yfrbn.cn
http://CbbErNhf.yfrbn.cn
http://paaKlKhl.yfrbn.cn
http://6gbG1SW6.yfrbn.cn
http://XD49LMl2.yfrbn.cn
http://B2H6cgRW.yfrbn.cn
http://AYc5waCu.yfrbn.cn
http://s4bS1gq1.yfrbn.cn
http://ahMRQk0l.yfrbn.cn
http://OPnsnHZe.yfrbn.cn
http://TYk658zH.yfrbn.cn
http://pAdjmhLT.yfrbn.cn
http://dWk5q69P.yfrbn.cn
http://Doje1UCw.yfrbn.cn
http://t6AILmzs.yfrbn.cn
http://tomxCmoJ.yfrbn.cn
http://zLDs40ta.yfrbn.cn
http://www.dtcms.com/a/381659.html

相关文章:

  • 少即是多:从 MPTCP 看优化干预的边界
  • 2025服贸会“海淀之夜”,点亮“科技”与“服务”底色
  • String留言板
  • js生成excel表格进阶版
  • Win 11 ARM 版搭建ESP-IDF环境问题记录
  • MyBatis主键返回:必须显式配置
  • MySQL——MVCC实现原理流程分析
  • Linux -- 基于TCP服务器实现一个简单的电商网站
  • 佳维视工业一体机 vs 普通电脑:工业场景选哪个?
  • 小迪安全v2023学习笔记(八十二讲)—— Java组件安全SolrShiroLog4jCVE复现
  • Spring AI(四)机构化输出
  • 单体到微服务拆分方案
  • 云端服务器使用指南:如何跨机传输较大文件(通过windows自带工具远程桌面连接 非常方便)
  • Linux 高性能 I/O 事件通知机制的核心系统调用—— `epoll_ctl`
  • 域格YM310 X09移芯CAT1模组HTTPS连接服务器
  • 连续随机变量无法用点概率描述出现了概率密度函数(Probability Density Function, PDF)
  • Go语言实战案例 — 工具开发篇:Go 实现条形码识别器
  • 洛谷-P1923 【深基9.例4】求第 k 小的数-普及-
  • DeerFlow实践:华为ITR流程的评审智能体设计
  • K均值聚类(K-Means)算法介绍及示例
  • 【企业架构】TOGAF-4A架构概览
  • 华为防火墙三层部署模式
  • Linux Kernel Core API:printk
  • 空间信息与数字技术专业主要学什么技能?
  • 遗传算法模型深度解析与实战应用
  • “开源AI智能名片链动2+1模式S2B2C商城小程序”在直播公屏引流中的应用与效果
  • C语言第五课:if、else 、if else if else 控制语句
  • mysql深入学习:主从复制,读写分离原理
  • Pandas 数据分析:从入门到精通的数据处理核心
  • Web前端面试题