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 = 回调通知
相关推荐
QXWZ_IA2 小时前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全
wdeok3 小时前
Socket编程Tcp
服务器·网络·tcp
xiaoye-duck18 小时前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
无足鸟ICT21 小时前
【RHCA+】iptraf-ng(网络监控分析)
linux·网络
坤坤子吖1 天前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
xiaoye-duck1 天前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型
andxe1 天前
工业级 PoE 交换机选型指南:破解边缘部署四大核心难题
运维·网络·安全·光通信·交换机
say_fall1 天前
【Linux网络编程】计算机网络基础:局域网与广域网、OSI七层模型与TCP/IP五层模型、封装解包与MAC/IP地址、端口号与socket编程接口
linux·网络·tcp/ip·计算机网络·信息与通信
Joy T1 天前
Gzip 压缩原理与实践:HTTP 响应压缩、性能收益与工程配置
网络·网络协议·http
叼烟扛炮1 天前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习