作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等
释放21集全网最深ConcurrentHashMap的vip视频,复现每一行源码
回答
BIO
阻塞式 I/O,NIO
同步非阻塞 I/O,AIO
异步非阻塞 I/O。它们三者之间有如下几个区别。
- I/O 模型
BIO
:同步且阻塞 I/O 模型。服务端模型为一个连接一个线程。NIO
:同步非阻塞 I/O 模型。服务端模型为一个线程处理多个连接。AIO
:异步非阻塞 I/O 模型。服务端模型为一个有效请求一个线程。
- 阻塞与否
BIO
:阻塞,即在读写操作完成之前,线程会一直等待,直到操作完成。NIO
:非阻塞,即线程在请求读写操作时会立即返回,可以进行其他任务。AIO
:非阻塞且异步,当操作完成时,会被动地通知或回调线程进行后续操作。
- 线程模型
BIO
:一个连接一个线程,对于每个新的客户端连接都需要创建一个新的线程。NIO
:多路复用,使用单个或几个线程来管理多个连接,通过 Selector 监控客户端的连接和请求。AIO
:异步任务完成后,系统会主动回调,使用线程池来处理这些回调,从而实现高效的并发处理。
- 应用场景
BIO
:适用于连接数比较少的场景,实现较为简单,入门级。NIO
:适用于连接数较多且连接较短的场景(例如聊天),实现稍微复杂,需要理解 Buffer、Channel、Selector 等 Java NIO 的概念。