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+同步+异步+阻塞+非阻塞相关推荐
- 【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...
网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数 ...
- 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章
来源:编程新说 网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTT ...
- 确定不来了解一下什么是 BIO NIO AIO 阻塞 非阻塞 同步 异步?
本文内容涉及同步与异步, 阻塞与非阻塞, BIO.NIO.AIO等概念, 这块内容本身比较复杂, 很难用三言两语说明白. 而书上的定义更不容易理解是什么意思. 下面跟着我一起解开它们神秘的面纱. BI ...
- cpu 被挂起和阻塞_迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章...
网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数 ...
- 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...
常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据. 如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTT ...
- NIO详解(二): BIO 浅谈 同步 异步与阻塞 非阻塞
在我们了解Java NIO/BIO的网络通信之前,我们先了解一下常用的阻塞/非阻塞模型以及同步/异步的概念 一.阻塞和非阻塞 从简单的开始,我们以经典的读取文件的模型举例.(对操作系统而言,所有的输入 ...
- 面试必会系列 - 5.1 网络BIO、NIO、epoll,同步/异步模型、阻塞/非阻塞模型,你能分清吗?
本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...
- java 异步阻塞_大白话搞懂什么是同步/异步/阻塞/非阻塞
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前言 在最近的一些面试中,跟应聘者聊了比较多关于"同步/异步,阻塞/非阻塞"相关的话题,发现大家对于这些概念的理解都比较模糊,甚至有的 ...
- 大白话搞懂什么是同步/异步/阻塞/非阻塞
前言 在最近的一些面试中,跟应聘者聊了比较多关于"同步/异步,阻塞/非阻塞"相关的话题,发现大家对于这些概念的理解都比较模糊,甚至有的同学会反问"他们不就是同一个东西吗? ...
最新文章
- memcache安装
- Linux 性能測试工具
- 【编程练习】C语言debug合集
- EF架构~在T4模版中为所有属性加默认值
- python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)
- python要学多久-python需要学多久?自学两年也很难达到企业标准!
- 〖Android〗代理与正常网络分开同步CyangenMod源码
- 邮件服务器fixpost服务(1)
- 【Python】Pandas数据挖掘与分析时的常用方法
- 分辨出谁在浏览Youtube、土豆
- 第25天多线程、网络编程
- margin 等高布局
- antd新增一行页码不正确_antd-Table@4.x对rowKey属性的重构
- maya2015 改变界面语言
- 游戏筑基开发之深度优先搜索算法(C语言)
- C语言状态机编程进阶
- 短距离无线通信设备的天线设计
- Timer定时器每天的固定时间执行
- 倒计时器CountDownTimer使用
- 路由器---IGMP协议详解
热门文章
- ELK日志分析平台.1-搭建
- 如何理解java采用Unicode编码
- CSS3:FlexBox的详解
- aspectj xml
- Android实例RSS客户端开发(2)--解析XML文件
- 一步一步配置aspnetdb数据库
- Python编写自动化脚本(无验证码)
- console对象的方法log()、info()、warn()、error()区别及几个实用的方法
- 现有工程项目上加响应式
- h5网页在移动端(安卓)head里的title为空,默认显示url地址。js代码将head的title设置为空