一句话:

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+同步+异步+阻塞+非阻塞相关推荐

  1. 【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...

    网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数 ...

  2. 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章

    来源:编程新说 网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTT ...

  3. 确定不来了解一下什么是 BIO NIO AIO 阻塞 非阻塞 同步 异步?

    本文内容涉及同步与异步, 阻塞与非阻塞, BIO.NIO.AIO等概念, 这块内容本身比较复杂, 很难用三言两语说明白. 而书上的定义更不容易理解是什么意思. 下面跟着我一起解开它们神秘的面纱. BI ...

  4. cpu 被挂起和阻塞_迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章...

    网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数 ...

  5. 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...

    常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据. 如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTT ...

  6. NIO详解(二): BIO 浅谈 同步 异步与阻塞 非阻塞

    在我们了解Java NIO/BIO的网络通信之前,我们先了解一下常用的阻塞/非阻塞模型以及同步/异步的概念 一.阻塞和非阻塞 从简单的开始,我们以经典的读取文件的模型举例.(对操作系统而言,所有的输入 ...

  7. 面试必会系列 - 5.1 网络BIO、NIO、epoll,同步/异步模型、阻塞/非阻塞模型,你能分清吗?

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  8. java 异步阻塞_大白话搞懂什么是同步/异步/阻塞/非阻塞

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 前言 在最近的一些面试中,跟应聘者聊了比较多关于"同步/异步,阻塞/非阻塞"相关的话题,发现大家对于这些概念的理解都比较模糊,甚至有的 ...

  9. 大白话搞懂什么是同步/异步/阻塞/非阻塞

    前言 在最近的一些面试中,跟应聘者聊了比较多关于"同步/异步,阻塞/非阻塞"相关的话题,发现大家对于这些概念的理解都比较模糊,甚至有的同学会反问"他们不就是同一个东西吗? ...

最新文章

  1. memcache安装
  2. Linux 性能測试工具
  3. 【编程练习】C语言debug合集
  4. EF架构~在T4模版中为所有属性加默认值
  5. python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)
  6. python要学多久-python需要学多久?自学两年也很难达到企业标准!
  7. 〖Android〗代理与正常网络分开同步CyangenMod源码
  8. 邮件服务器fixpost服务(1)
  9. 【Python】Pandas数据挖掘与分析时的常用方法
  10. 分辨出谁在浏览Youtube、土豆
  11. 第25天多线程、网络编程
  12. margin 等高布局
  13. antd新增一行页码不正确_antd-Table@4.x对rowKey属性的重构
  14. maya2015 改变界面语言
  15. 游戏筑基开发之深度优先搜索算法(C语言)
  16. C语言状态机编程进阶
  17. 短距离无线通信设备的天线设计
  18. Timer定时器每天的固定时间执行
  19. 倒计时器CountDownTimer使用
  20. 路由器---IGMP协议详解

热门文章

  1. ELK日志分析平台.1-搭建
  2. 如何理解java采用Unicode编码
  3. CSS3:FlexBox的详解
  4. aspectj xml
  5. Android实例RSS客户端开发(2)--解析XML文件
  6. 一步一步配置aspnetdb数据库
  7. Python编写自动化脚本(无验证码)
  8. console对象的方法log()、info()、warn()、error()区别及几个实用的方法
  9. 现有工程项目上加响应式
  10. h5网页在移动端(安卓)head里的title为空,默认显示url地址。js代码将head的title设置为空