当前位置:
首页 >
AIO+BIO+NIO+同步+异步+阻塞+非阻塞
发布时间:2023/12/31
51
豆豆
生活随笔
收集整理的这篇文章主要介绍了
AIO+BIO+NIO+同步+异步+阻塞+非阻塞
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
一句话:
AIO是NIO的升级版,NIO是BIO的升级版[1]
所以其实是用AIO
| IO名称 | JDK版本 | 数据类型 | IO类型 |
| IO | 流 | ||
| BIO(偶尔也叫做OIO) | <1.4 | 同步阻塞IO | |
| NIO | 1.4 | 缓冲 | 同步非阻塞IO |
| AIO(NIO2.0)[7] | 1.7 | 异步非阻塞IO |
对比[3]如下:
然后来说说同步、异步、阻塞非阻塞:
| 概念 | 流程图 | 备注 |
| 同步阻塞IO | 针对Sender而言,请求发送出去以后,一直等到Receiver有结果了才返回,这是同步。在Sender获取结果的期间一直被block住了,也就是在此期间Sender不能处理其它事情,这是阻塞。 | |
| 异步阻塞IO | 针对Sender而言,请求发送出去以后,立刻返回,然后再等待Receiver的callback,最后再次请求获取response,这整个过程是异步。在Sender等待Receiver的callback期间一直被block住了,也就是在此期间Sender不能处理其它事情,这是阻塞。 | |
| 同步非阻塞IO | 针对Sender而言,请求发送出去以后,立刻返回,然后再不停的发送请求,直到Receiver处理好结果后,最后一次发请求给Receiver才获得response。Sender一直在主动轮询,每一个请求都是同步的,整个过程也是同步的。在Sender等待Receiver的response期间一直是可以处理其它事情的(比如:可以发送请求询问结果),这是非阻塞。 | |
| 异步非阻塞IO | 针对Sender而言,请求发送出去以后,立刻返回,然后再等待Receiver的callback,最后再次请求获取response,这整个过程是异步。在Sender等待Receiver的callback期间一直是可以处理其它事情的,这是非阻塞。 |
记忆的时候,上面的四种情况重点记忆“阻塞和非阻塞”极客
上面四种情况可以知道性能上的最佳方式是:异步阻塞IO和异步非阻塞IO
两种I/O多路复用模式:
| 模式 | 原理 | 应用场景 | 举例 |
| reactor | Linux epoll | 同步IO | callback |
| proactor | Windows IO completion port | 异步IO | future/await |
基本 Linux I/O 模型的简单矩阵[6]:
Reference:
[1]Java核心(五)深入理解BIO、NIO、AIO
[2]简述JAVA同步、异步、阻塞和非阻塞之间的区别
[3]Java AIO 基本介绍
[4]如何深刻理解Reactor和Proactor?
[5]java-IO-多路复用机制
[6]Java新一代网络编程模型AIO原理及Linux系统AIO介绍
[7]浅析Java 中的流--BIO、NIO、AIO及NIO中的三大组件Buffer,Channel,Selector
创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖总结
以上是生活随笔为你收集整理的AIO+BIO+NIO+同步+异步+阻塞+非阻塞的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 免费保险是什么套路
- 下一篇: Error while compilin