美文网首页java 编程
BIO、NIO、AIO 网络通信区别

BIO、NIO、AIO 网络通信区别

作者: 真海ice | 来源:发表于2018-02-10 09:24 被阅读0次

    BIO 为阻塞式通信,主要性能消耗在开启新线程负责客户端的链接,该线程会一直等待直到客户端数据发送完,中间可能因为网速问题,文件太大 等,造成该线程长期处于等待状态,浪费该线程的开销。如下图:

    bio.png

    NIO为非阻塞通信,基于事件通知机制。当有客户端请求时,会先把客户端的数据存储到系统缓存,等数据发送完毕,程序再开启一个线程去系统缓存拉去数据或者对数据其他处理 (如文件数据直接存入硬盘,是零拷贝数据不进入程序内 )效率高。
    下图可以粗略理解一下,一个客户端请求的事件通知,

    nio.png

    AIO为 NIO2.0 版本,JDK1.7后才有,完全异步非阻塞通信。

    总结:

    一、 BIO和NIO不同:本质就是阻塞和非阻塞的区别
    • 阻塞:应用程序在获取客户端的网络数据时候,如果网络传输数据很慢,那服务端的线程就一直等待数据传输完毕。
    • 非阻塞:应用程序直接可以获取已经准备好的数据(存在系统缓存中),无需等待。
    • BIO为同步阻塞机制,NIO为同步非阻塞机制。NIO并没有实现异步,在JDK1.7后,NIO支持异步非阻塞机制,即NIO2.0 (AIO)
    二、 同步和异步不同:指操作系统与应用程序对IO的操作不同
    • 同步:应用程序直接参与IO的读写操作,应用程序直接阻塞到某个方法上,直到数据准备就绪;或者采用轮询事件通知的机制检查数据是否就绪,如果就绪就读取数据。
    • 异步:所有的IO读写操作都交给操作系统处理,与我们的应用程序没有直接关系,应用程序不关心IO读写,当操作系统完成IO读写操作时,会给我们的应用程序发通知,程序直接拿走数据即可。

    同步指的是server服务器
    阻塞指的是具体的技术(BIO/NIO)
    *对AIO的封装,即是 Netty *

    相关文章

      网友评论

        本文标题:BIO、NIO、AIO 网络通信区别

        本文链接:https://www.haomeiwen.com/subject/lulqtftx.html