最终总结:BIO、NIO、AIO 全面对比
一、核心区别一览表
| 对比维度 | BIO | NIO | AIO |
|---|
| 全称 | Blocking IO | Non-blocking IO | Asynchronous IO |
| 中文名 | 阻塞式 IO | 非阻塞式 IO | 异步 IO |
| 同步/异步 | 同步 | 同步 | 异步 |
| 阻塞/非阻塞 | 阻塞 | 非阻塞 | 非阻塞 |
| 线程模型 | 一个连接一个线程 | 一个线程管理多个连接 | 系统线程池管理 |
| 核心组件 | Socket、ServerSocket | Selector、Channel、ByteBuffer | AsynchronousChannel、CompletionHandler |
| 适用场景 | 连接数少、并发低 | 连接数多、并发高 | 连接数多、操作耗时 |
| 编程难度 | 简单 | 中等 | 复杂(回调地狱) |
| 性能 | 低 | 高 | 高 |
二、通俗比喻总结
BIO(排队办业务)
你去银行办业务:
1. 排队等叫号(阻塞)
2. 轮到你,柜员专门为你服务(一个线程一个客户)
3. 办完才能离开(阻塞)
问题:人多了,柜员不够用(线程多,资源浪费)
NIO(银行大堂经理)
银行有个大堂经理:
1. 不断巡视各个窗口(Selector 轮询)
2. 哪个窗口有人,就去处理(事件驱动)
3. 一个经理管理所有窗口(一个线程管理多个连接)
优势:一个人干多个人的活(资源利用率高)
AIO(外卖送达通知)
你点外卖:
1. 下单后立即返回(异步)
2. 不用一直盯着(无需轮询)
3. 送到了自动打电话通知你(回调)
优势:完全不用等,到了自动通知(最高效)