NIO(Non-Blocking IO)的IO处理机制与以往的标准IO机制(BIO,Blocking IO)不同的是,新的机制把重点放在了如何缩短抽象与现实之间的距离上面。

NIO中提出了一种新的抽象,NIO 弥补了原来的BIO的不足,它在标准 Java 代码中提供了高速的、面向块的I/O。

 

NIO的包括三个核心概念:缓冲区(Buffer)、通道(Channel)、选择器(Selector)。思维导图如下:

谈谈NIO的理解

BIO与NIO

BIO与NIO之间的共同点是他们都是同步的。而非异步的。

(1)BIO是阻塞的(当前线程必须等待感兴趣的事情发生), NIO是非阻塞的(事件选择,感兴趣的事情发生可以通知线程,而不必一直在哪等待);

(2)BIO是面向流式的IO抽象(一次一个字节地处理数据), NIO是面向块的IO抽象(每一个操作都在一步中产生或者消费一个数据块(Buffer));

(3)BIO的服务器实现模式为一个连接一个线程,NIO服务器实现模式为一个请求一个线程;

 

缓冲区

一个Buffer对象是固定数量的数据的容器。其作用是一个存储器,或者分段运输区,在这里数据可被存储并在之后用于检索。缓冲区的工作与通道紧密联系。 Buffer的类层次图:

谈谈NIO的理解

通道

通道用于在字节缓冲区和位于通道另一边的实体(通常是一个文件或套接字)之间有效地传输数据。

例子:

通道可以形象地比喻为银行出纳窗口使用的动导管。您的薪水支票就是您要传送的信息,载体(Carrier)就好比一个缓冲区。您先填充缓冲区(将您的薪水支票放到载体上),接着将缓冲“写”到通道中(将载体进导管中),然后信息负载就被传递到通道另一边的I/O服务(银行出纳员)

 

channel类的继承关系如下:

谈谈NIO的理解

选择器

选择器提供选择执行已经就绪的任务的能力,这使得多元I/O成为可能。

选择器类管理着一个被注册的通道集合的信息和它们的就绪状态。通道是和选择器一起被注册的,并且使用选择器来更新通道的就绪状态。当这么做的时候,可以选择将被激发的线程挂起,直到有就绪的的通道。

谈谈NIO的理解

 

 

相关文章:

  • 2021-11-22
  • 2021-08-17
  • 2022-01-13
  • 2021-12-03
  • 2021-07-03
猜你喜欢
  • 2021-12-28
  • 2022-12-23
  • 2021-06-04
  • 2022-12-23
  • 2021-08-19
  • 2021-06-01
  • 2021-07-22
相关资源
相似解决方案