NIO与BIO

1.传统的BIO

  • 如果不开启多个线程则只能为一个客户端来提供服务
  • 如果进来一个客户端就开启一个线程,则需要创建大量的线程,创建大量的线程需求耗费的资源很多
  • 使用线程池来解决
  • 传统的BIO有两个阻塞的地方 accept read

2.NIO概述

  • Non-blocking IO(非阻塞IO)
  • Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。
  • 管道(双向)+缓冲区(用来存放数据),数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中
  • Java NIO: Selectors(选择器)
  • Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。

3.NIO与BIO

  • IO为同步阻塞形式,NIO为同步非阻塞形式,NIO并没有实现异步,在JDK1.7后升级NIO库包,支持异步非阻塞

通信模型NIO2.0(AIO)

  • BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情那么就会造成不必要的线程开销,当然可以通过线程池机制改善。
  • NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
  • AIO(NIO.2):异步非阻塞式IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

4.BIO NIO

  • BIO: 同步 阻塞 的IO
  • NIO: 同步 非阻塞的IO(生产环境使用最多的一种IO)

你可能感兴趣的:(NIO与BIO)