BIO为同步阻塞模型,每个连接需独立线程处理,适用于低并发场景;NIO基于通道和选择器实现同步非阻塞,单线程可管理多连接,适合高并发应用;AIO为异步非阻塞模型,由系统完成读写并回调通知,效率最高但编程复杂,Java中应用较少。

在 Java 中,BIO、NIO 和 AIO 是三种不同的 I/O 模型,它们在处理数据读写的方式上有本质区别,适用于不同场景。
BIO(Blocking I/O):同步阻塞 I/O
BIO 是传统的 I/O 模型,每个连接都需要一个独立的线程来处理。当数据没有准备好时,线程会一直阻塞等待。
特点:- 一个连接对应一个线程,资源消耗大
- 编程模型简单,易于理解
- 在高并发场景下性能差,容易因线程过多导致系统崩溃
适用于连接数少、并发低的场景,比如早期的客户端-服务器通信程序。
NIO(Non-blocking I/O):同步非阻塞 I/O
NIO 使用通道(Channel)和缓冲区(Buffer)进行数据操作,并通过选择器(Selector)实现一个线程管理多个连接。
立即学习“Java免费学习笔记(深入)”;
核心组件:- Channel:类似流,但可读可写,支持异步传输
- Buffer:数据载体,必须通过 Buffer 进行读写
- Selector:监听多个通道事件(如连接、读就绪),实现单线程管理多通道
采用事件驱动机制,只有在通道真正有数据可读或可写时才进行操作,避免了线程空等。
适合高并发、大量连接但同时活跃连接不多的场景,如 Netty 就是基于 NIO 实现的。
AIO(Asynchronous I/O):异步非阻塞 I/O
AIO 是真正的异步 I/O 模型,读写操作由操作系统完成,完成后通知应用程序(通过回调函数)。
特点:- 不需轮询,完全由系统回调通知结果
- 更高效地利用系统资源,减少线程切换开销
- 编程复杂度较高,调试困难
AIO 在 Linux 上依赖于 epoll 的异步模式,但在 Java 中使用较少,主要因为底层支持不够完善,且 NIO 已能满足大多数需求。
基本上就这些。BIO 简单但效率低,NIO 高效应用广,AIO 更进一步但使用门槛高。选择哪种模型,取决于实际业务对性能和复杂度的要求。











