2019独角兽企业重金招聘Python工程师标准>>>

先来个例子理解一下概念,以银行取款为例:

  • 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。

  • 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API)。

  • 阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回)。

  • 非阻塞 : 柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到号你就不能去,你可以不断问大堂经理排到了没有,大堂经理如果说还没到你就不能去(使用非阻塞IO时,如果不能读写Java调用会马上返回,当IO事件分发器会通知可读写时再继续进行读写,不断循环直到读写完成)。

Java对BIO、NIO、AIO的支持

  • Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

  • Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

  • Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,

BIO、NIO、AIO适用场景分析:

  • BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

  • NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

  • AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

另外,I/O属于底层操作,需要操作系统支持,并发也需要操作系统的支持,所以性能方面不同操作系统差异会比较明显。

转载于:https://my.oschina.net/u/1185331/blog/508104

Java BIO、NIO、AIO 学习相关推荐

  1. java BIO/NIO/AIO 学习

    参考地址 https://www.cnblogs.com/diegodu/p/6823855.html 一.了解Unix网络编程5种I/O模型 1.1.阻塞式I/O模型 阻塞I/O(blocking ...

  2. java aio nio bio_3. 彤哥说netty系列之Java BIO NIO AIO进化史

    你好,我是彤哥,本篇是netty系列的第三篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 上一章我们介绍了IO的五种模型,实际上Java只支持其中的三种,即BIO/NIO/ ...

  3. BIO NIO AIO 学习笔记

    BIO NIO AIO 1.同步阻塞的BIO 1.1 BIO介绍 1.2 BIO通信案例 2.同步非阻塞的NIO 2.1 NIO的介绍 2.2 NIO核心一Buffer缓冲区 2.3 NIO核心二Ch ...

  4. 【Java IO模式】Java BIO NIO AIO总结

    一同步与异步阻塞与非阻塞 1同步与异步 2阻塞与非阻塞 3IO模式 二BIO 概念描述 特点 代码实现 三NIO 概念描述 特点 代码描述 四AIO 一.同步与异步.阻塞与非阻塞 1.同步与异步 同步 ...

  5. java BIO NIO AIO 理论篇

    http://furturestrategist.iteye.com/blog/1463369 java中的IO主要源自于网络和本地文件 IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO. ...

  6. 也谈BIO | NIO | AIO (Java版--转)

    http://my.oschina.net/bluesky0leon/blog/132361 关于BIO | NIO | AIO的讨论一直存在,有时候也很容易让人混淆,就我的理解,给出一个解释: BI ...

  7. Java的IO:BIO | NIO | AIO

    原文: http://my.oschina.net/bluesky0leon/blog/132361 BIO | NIO | AIO,本身的描述都是在Java语言的基础上的.而描述IO,我们需要从两个 ...

  8. Java IO(BIO, NIO, AIO) 总结

    文章转载自:JavaGuide 目录 BIO,NIO,AIO 总结 同步与异步 阻塞和非阻塞 1. BIO (Blocking I/O) 1.1 传统 BIO 1.2 伪异步 IO 1.3 代码示例 ...

  9. java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

  10. Java常见面试题:BIO,NIO,AIO 有什么区别?

    Java 中 IO 流分为几种? 按功能来分:输入流(input).输出流(output). 按类型来分:字节流和字符流. 字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流 ...

最新文章

  1. Java 多线程概述
  2. js 时间比较_成都js聚合物弹性防水涂料生产厂家来电洽谈_鹏晨防水
  3. Python基础day05【函数(局部变量、全局变量、多函数执行流程、函数返回值、函数参数)、拆包、引用、可变与不可变类型、函数注意事项】
  4. 通过动效学习UI设计
  5. leetcode 592. Fraction Addition and Subtraction | 592. 分数加减运算(最大公因数gcd,最小公倍数lcm)
  6. PHP---错误处理(error)
  7. 动态规划——打家劫舍||(Leetcode 213)
  8. Java中的可变参数方法
  9. 【bzoj1758】[Wc2010]重建计划
  10. jdbc executebatch 非事务_jdbc技术
  11. HTML日志查看器,在浏览器中查看Tomcat日志文件
  12. 英语语法总结--动词的时态
  13. 在centos中如何用yum安装最新的yum源
  14. 拼多多搜索热度怎么做|重庆乾胤
  15. linux文件夹压缩与分卷压缩
  16. 计算机无法进入bios模式,电脑系统无法进入bios界面解决方法
  17. sqlite数据库的版本更替
  18. 电阻的耐功率冲击与耐电压冲击
  19. 通过PWM实现呼吸灯
  20. 微信登录界面安卓代码_「微信多开神器」一键安排你的所有微信

热门文章

  1. 知识图谱(四)——实体识别和扩展
  2. SRS前需求双向追溯解决方法
  3. 使用 FocusScopeNode 在 TextFormFields 之间轻松移动焦点
  4. java期末考试试卷及答案文库_备战期末考!初中全科下册期末试卷(含答案)合集,建议收藏!...
  5. 幸运大抽奖 | 神策 2020 数据驱动用户大会等你来
  6. 专访 | 神策数据CEO桑文锋:谁说大数据不需要「小而美」
  7. 爬虫基础, 乱码问题, jupyter, urllib, requests, lxml, multiprocessing并发, session, beautifulsoup...
  8. Redisson官方文档 - 目录
  9. 大数据+社会化协同 菜鸟不菜成老师
  10. Citrix Director