BIO、NIO、AIO简单对比

一、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简单对比)