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 = 回调通知
相关推荐
2401_873479405 分钟前
如何识别代理IP和伪装流量?用IP情报工具三步穿透住宅代理伪装
网络·数据库·网络协议·tcp/ip·ip
s09071366 分钟前
深入解析 Sensor Hub Transport Protocol (SHTP) 协议
网络·协议·传感器·shtp
hey you~23 分钟前
400电话选型技术测评:一个开发视角的线路质量评估方案
运维·网络·数据库·400电话·企业通信
曾令胜1 小时前
HTTP协议基础总结
网络·网络协议·http
hj2862512 小时前
Docker 核心知识点整理(网络 + Dockerfile + 原理 + 命令)
网络·docker·容器
so~what2 小时前
NTN全局控制器集中管理的优势
网络·ntn
normanhere2 小时前
华为S5735堆叠配置加华为AC S9700-S主备配置案例
网络
sdghterhd11 小时前
WebSocket 快速入门教程(附示例源码)
网络·websocket·网络协议
xy345312 小时前
Wireshark捕获过滤器——语法元素详解
网络·测试工具·渗透测试·wireshark
DLYSB_13 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯