NIO(Non-blocking IO / New IO) 是 Java 1.4 版本引入的一套新的 IO API,其核心特性之一是支持非阻塞 IO。它主要解决了传统 BIO(Blocking IO)在高并发场景下资源消耗大、扩展性差的问题。
1. 核心概念对比:BIO vs NIO
| 特性 | BIO (传统阻塞 IO) | NIO (非阻塞 IO) |
|---|---|---|
| 模型 | 面向流(Stream-oriented) | 面向缓冲区(Buffer-oriented) |
| 阻塞方式 | 阻塞:线程发起 IO 请求后,必须等待数据完全读取或写入完成才能继续执行其他任务。 | 非阻塞:线程发起 IO 请求后,如果数据未就绪,立即返回,线程可以去处理其他任务,稍后再来检查数据状态。 |
| 线程模型 一对一:一个连接需要一个独立的线程维持。高并发时需要大量线程,导致上下文切换开销巨大。 | 多对一/多对多:一个线程可以管理多个连接(通过 Selector)。大幅减少线程数量,降低系统负载。 | |
| 适用场景 | 连接数少且固定,业务逻辑简单。 | 连接数多且连接较短(轻操作),如 |