java IO模型详解

IO模型介绍

      • java IO模型
      • BIO(Blocking IO)
        • 缺点:
        • 应用场景:
      • NIO(Non Blocking IO)
        • 应用场景:
      • AIO(NIO 2.0)
      • BIO、 NIO、 AIO 对比

java IO模型

IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式:BIO,NIO,AIO

BIO(Blocking IO)

同步阻塞模型,一个客户端连接对应一个处理线程

缺点:

1、IO代码里read操作是阻塞操作,如果连接不做数据读写操作会导致线程阻塞,浪费资源 2、如果线程很多,会导致服务器线程太多,压力太大。

应用场景:

BIO 方式适用于连接数目比较小且固定的架构, 这种方式对服务器资源要求比较高, 但程序简单易理解。
java IO模型详解_第1张图片

NIO(Non Blocking IO)

同步非阻塞,服务器实现模式为一个线程可以处理多个请求(连接),客户端发送的连接请求都会注册到多路复用器selector上,多路复用 器轮询到连接有IO请求就进行处理。
I/O多路复用底层一般用的Linux API(select,poll,epoll)来实现,他们的区别如下表:
java IO模型详解_第2张图片

应用场景:

NIO方式适用于连接数目多且连接比较短(轻操作) 的架构, 比如聊天服务器, 弹幕系统, 服务器间通讯,编程比较复杂, JDK1.4 开 始支持
NIO 有三大核心组件: Channel(通道), Buffer(缓冲区),Selector(选择器)
java IO模型详解_第3张图片

  1. channel 类似于流,每个 channel 对应一个 buffer缓冲区,buffer 底层就是个数组
  2. channel 会注册到 selector 上,由 selector 根据 channel 读写事件的发生将其交由某个空闲的线程处理
  3. selector 可以对应一个或多个线程
  4. NIO 的 Buffer 和 channel 都是既可以读也可以写

AIO(NIO 2.0)

异步非阻塞, 由操作系统完成后回调通知服务端程序启动线程去处理, 一般适用于连接数较多且连接时间较长的应用 应用场景:
AIO方式适用于连接数目多且连接比较长(重操作) 的架构,JDK7 开始支持

BIO、 NIO、 AIO 对比

java IO模型详解_第4张图片

你可能感兴趣的:(java,netty,java,nio)