zoukankan      html  css  js  c++  java
  • Java面试BIO,NIO,AIO 的区别

    既然你能看到这,说明你已经有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的映射,数据地址用一个内存地址,地址不需要倒腾复制。直接读进来直接出去使用。

    推荐学习资料:

    netty权威指南 (会把NIO,AIO原理讲下)

    netty in action

  • 相关阅读:
    mysql 历史版本下载
    mysql 5.7 版本 You must reset your password using ALTER USER statement before executing this statement报错处理
    5.7 zip 版本的安装 以及遇到的坑
    mysql 5.6zip版本的卸载与5.7 zip 版本的安装
    mysql数据库的备份与还原
    本地Navicat连接docker里的mysql
    docker修改数据库密码
    docker 在push镜像到本地registry出现的500 Internal Server Error
    linux 没有界面内容显示不全解决办法
    json与map互相转换
  • 原文地址:https://www.cnblogs.com/codelives/p/13364962.html
Copyright © 2011-2022 走看看