美文网首页
BIO、NIO、AIO简单对比

BIO、NIO、AIO简单对比

作者: 不是明天 | 来源:发表于2019-03-25 15:49 被阅读0次

    一、BIO

    BIO ,Block-IO ,阻塞、同步的通信模式。

    优势:模式简单,使用方便
    劣势:并发处理能力低,通信耗时,依赖网速

    原理:
    1.一请求一应答:服务端通过Acceptor线程,监听客户端请求并处理
    2.伪异步IO:引入线程池

    BIO的主要API:Socket、ServerSocket

    二、NIO

    New IO/Non-Block IO,非阻塞、同步的通信模式。

    优势:通过一个线程,处理大量客户端的请求。

    原理:
    客户端和服务端通过channel通信,NIO可以通过channel进行读和写操作。多个channel被注册到一个selecor(多路复用器)上,selector通过一个线程不断轮询channel,找出准备就绪的channel进行IO操作。

    NIO与BIO实现上的区别:

    • 缓冲区Buffer:
    1. 是将数据直接写入或读取到流 Stream 对象中。
    2. NIO 的数据操作都是在 Buffer 中进行的。Buffer 实际上是一个数组。Buffer 最常见的类型是ByteBuffer,另外还有 CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer。
    • 通道 Channel :

    1.Channel是双向的,Stream流是单向的。支持同时读写。
    2.Channel分类:一类是网络读写(SelectableChannel),一类是用于文件操作(FileChannel)。我们使用的是前者 SocketChannel 和 ServerSocketChannel ,都是SelectableChannel 的子类。

    • 多路复用器 Selector:
      NIO变成的关键。

    三、AIO

    Asynchronous IO,是一种非阻塞、异步的通信模式。

    原理
    AIO 并没有采用 NIO 的多路复用器,而是使用异步通道的概念。其 read,write 方法的返回类型,都是 Future 对象。而 Future 模型是异步的,其核心思想是:去主函数等待时间。

    AIO主要API
    AIO 模型中通过 AsynchronousSocketChannel 和 AsynchronousServerSocketChannel 实现套接字通道的通信。非阻塞,异步。

    四、需要理解的问题。

    1.BIO为1对1,那么NIO呢?

    个人理解,BIO的1对1,是指,一个请求直到IO操作完成(不包含业务处理)这个过程,都是同一个线程进行处理。
    而NIO,对于多个连接,只需要一个线程进行监听,IO操作可以交给其他线程处理。

    2.什么是同步和异步?

    同步:指方法由当前线程执行。同步IO指数据拷贝由当前线程完成。
    异步:指方法不由本线程执行。异步IO指数据拷贝由操作系统完成。

    3.什么是阻塞和非阻塞?

    阻塞:指方法调阻塞用等待,执行完之后才返回。
    非阻塞:指方法不需等待执行完,立即返回。

    相关文章

      网友评论

          本文标题:BIO、NIO、AIO简单对比

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