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 = 回调通知
相关推荐
IT大白鼠5 小时前
MSF二次开发与自定义模块编写
网络·安全·web安全·msf
Julien20045 小时前
调查和解决 SELinux 问题
linux·运维·服务器·网络·学习方法
kekekzt6 小时前
TCP协议的粘包问题介绍,IP分片,MTU,MSS,滑动窗口的概念及之间的关系
网络·网络协议·tcp/ip
mooooooooooye9 小时前
2026 年跨平台 SSH 客户端怎么选?Xterminal、Termius、MobaXterm 谁更合适
服务器·网络·ssh
Blockchina9 小时前
Codex 实战:从一句需求到可验收的 Linux 主机巡检脚本
运维·服务器·网络
江安下小雨11 小时前
muduo网络库(十六):新增连接池模块
网络·c++
aiot1891893521811 小时前
机场候机大厅高空场景技术红线!蓝牙AOA不能做手机导航??!!
大数据·网络·人工智能·蓝牙aoa
从入门到退休12 小时前
企业远程控制选型:向日葵SDK vs RustDesk自建,谁是更务实的选择?
运维·服务器·网络·远程工作·远程控制
fb_1234512 小时前
网络技术基础
网络
黑臂麒麟13 小时前
HarmonyOS 网络连接诊断实战:检测网络状态、WiFi 切换、弱网监测一网打尽
网络·华为·arkts·鸿蒙