BIO、NIO、AIO 区别

一、先记住一句话

BIO = 同步阻塞
NIO = 同步非阻塞
AIO = 异步非阻塞


二、用生活例子秒懂

1. BIO(同步阻塞)

去餐厅吃饭,必须站在窗口死等,厨师不做好你就不能动。

  • 一个连接 = 一个线程
  • 连接不读完,线程一直卡住
  • 并发低,浪费资源

2. NIO(同步非阻塞)

去餐厅吃饭,不用死等,隔一会儿去问一下好了没,没好就去干别的。

  • 一个线程 = 管理多个连接
  • 线程不卡住,轮询检查
  • 高并发、高性能

3. AIO(异步非阻塞)

点餐后直接走人,厨师做好了主动打电话通知你。

  • 完全不用等
  • 操作系统主动通知
  • 真正异步

三、核心区别(直接背)

特性 BIO NIO AIO
全称 同步阻塞IO 同步非阻塞IO 异步非阻塞IO
线程模型 1连接=1线程 1线程=多连接 依赖操作系统回调
是否阻塞 阻塞 非阻塞 非阻塞
复杂度 简单 中等 复杂
性能 很高
适用场景 连接少 高并发 高并发+长连接
Java实现 ServerSocket Java NIO AsynchronousChannel
实际使用 极少 Netty(主流) 很少用

四、底层核心区别

1. BIO

  • 面向
  • 阻塞:accept()read() 都会卡住线程
  • 无法支撑高并发

2. NIO(重点!面试必考)

三大组件:

  • Channel(通道):双向读写
  • Buffer(缓冲区):数据先放缓冲区
  • Selector(选择器):一个线程管理成千上万个连接

核心思想:一个线程 + 一个选择器 = 管理所有连接

3. AIO

  • 不需要 Selector
  • 基于回调
  • 操作系统完成IO后主动通知
  • Windows 支持好,Linux 支持一般

五、最关键结论(必须记住)

  1. BIO 是传统IO,阻塞,低并发
  2. NIO 是非阻塞,高并发,Java 后端主流
  3. AIO 是真正异步,用得少
  4. 现在高并发网络编程 = 全用 Netty(NIO 框架)

六、面试高频题(标准答案)

1. BIO、NIO、AIO 区别?

  • BIO:同步阻塞,一个连接一个线程,并发低。
  • NIO:同步非阻塞,一个线程管理多个连接,有Selector、Channel、Buffer。
  • AIO:异步非阻塞,基于回调,操作系统主动通知。

2. 为什么NIO能高并发?

因为Selector 选择器让一个线程可以监听成千上万个连接,不阻塞,资源消耗极低。

3. 企业用哪个?

NIO + Netty,几乎所有高性能框架(Dubbo、RocketMQ、Redis客户端)都用 Netty。


总结

  • BIO = 死等
  • NIO = 轮询
  • AIO = 回调通知
相关推荐
乐维_lwops5 小时前
乐维社区“专家坐诊”第403期问答
运维·网络·监控系统·答疑·lerwee运维智能体
小王C语言6 小时前
虚拟机开机过程中关机,再次开机没有分配 IP
linux·网络·tcp/ip
零零信安6 小时前
暗网监测技术实践(一):威胁源采集与反爬对抗——基于《暗网情报技术能力框架》的双生态视角
网络·数据泄露·零零信安
翼龙云_cloud7 小时前
阿里云国际站代理商:ECS弹性伸缩 自动应对流量高峰
运维·网络·数据库·阿里云·架构
ZJH__GO7 小时前
网络编程v4--群聊和私聊的实现
运维·服务器·网络
方乐寺村7 小时前
解密prompt系列. MCP - 工具演变 & MCP基础
网络·prompt
砚凝霜7 小时前
软考网络工程师|第 4 章 WLAN MAC 机制、Ad Hoc、无线安全、WPAN 蓝牙 ZigBee 完整备考笔记
网络·笔记·安全
严谨的麻辣烫14 小时前
Linux sysctl 网络参数调优实战:高并发与长连接场景下的内核配置
linux·网络·php
爱研究的小梁20 小时前
多链路聚合通信:时延控制与网络波动对抗逻辑梳理
网络·人工智能·信息与通信
珠***格20 小时前
分布式光伏电站:四可装置如何实现 “可观、可测、可控、可调”
网络·人工智能·分布式·架构·能源