写点什么

Java 面试:BIO,NIO,AIO 的区别,别再傻傻分不清楚

用户头像
Java大蜗牛
关注
发布于: 2021 年 05 月 06 日

既然你能看到这,说明你有一定的 Java 基础了,不然咋面试呢?

同步 &异步, 阻塞 &非阻塞 基本了解

  • 同步(阻塞): 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。

  • 异步(非阻塞): 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果

BIO: (Blocking I/O) - 阻塞 IO

也叫传统 IO


1) 先将文件内容从磁盘中拷贝到操作系统 buffer

2) 再从操作系统 buffer 拷贝到 程序应用(应用层)buffer

3) 从程序 buffer 拷贝到 socket buffer

4) 从 socket buffer 拷贝到协议引擎.

传统 IO 慢的原因是因为,数据捣腾过好几遍,才走到 socket 中

NIO (New I/O) - 非阻塞 IO

nio 是 New IO 的简称,在 jdk1.4 里提供的新 api 。Sun 官方标榜的特性如下: 为所有的原始类型提供(Buffer)缓存支持。字符集编码解码解决方案。 Channel :一个新的原始 I/O 抽象。 支持锁和内存映射文件的文件访问接口。 提供多路(non-bloking) 非阻塞式的高伸缩性网络 I/O


NIO 不经过应用层的缓存,数据直接放在操作系统的缓存,应用层只是直接发送指令,让操作系统 Read buffer 直接写到 Socket Buffer .少了内核到应用层之间过渡。

AIO (Asynchronous I/O) - 异步 IO

JDK1.7 里面叫 AIO, JDK1.5 叫 NIO,AIO 才叫做异步 IO,NIO 其实并不是真正意义上的异步 IO,NIO 只是非阻塞 IO。

AIO 连系统缓存 buffer 都省了,在外层建立 NMAP 的映射,数据地址用一个内存地址,地址不需要倒腾复制。直接读进来直接出去使用。


最后说一句,小编整理了 2021 最新完整面试题及答案,有很多干货,包含 mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,需要的加 vx:a13142089174


(求关注)如果觉得本文对你有帮助,请三连支持一下 谢谢!


用户头像

Java大蜗牛

关注

Java程序员一枚,不定时更新分享Java技术! 2021.04.29 加入

加小助手vx:a13142089174 领取2021最新完整面试题及答案(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、JVM、源码、算法等详细讲解,详细的学习规划图等学习资料!

评论

发布
暂无评论
Java面试:BIO,NIO,AIO 的区别,别再傻傻分不清楚