Java Reactor 线程模型 Netty 模型

Java Reactor 线程模型 Netty 模型

  • 一、Netty简介
  • 二、线程模型
    • 1.传统阻塞I/O服务模型
    • 2.Reactor模式:IO复用监听事件并分发给某个线程处理
      • 1.单Reactor、单线程(高并发阻塞)
      • 2.单Reactor、多线程
      • 3.主从Reactor、多线程
  • 二、Netty模型
    • 1.概念原理图
    • 2.数据流向图

一、Netty简介

1.Netty是一个 异步的、事件驱动的 网络框架
2.主要用于开发 高性能、高可靠性的 网络IO程序
3.本质是一个 NIO 框架
4.应用场景:高性能RPC框架、网络游戏、地图服务器、大数据领域
5.架构:

TCP/IP
原生JDK IO/网络
NIO
Netty

二、线程模型

1.传统阻塞I/O服务模型

1.采用阻塞IO模式获取输入的数据
2.每个客户端连接需要一个独立线程去维护

Java Reactor 线程模型 Netty 模型_第1张图片

2.Reactor模式:IO复用监听事件并分发给某个线程处理

Reactor 线程
主从
Reactor: 独占一个线程进行事件监听
Handler: 线程池中执行任务的某一线程

1.单Reactor、单线程(高并发阻塞)

优点:模型简单,没有多线程、进程通信、竞争的问题
缺点:性能和可靠性存在瓶颈
场景:客户端数量有限、业务处理快

Java Reactor 线程模型 Netty 模型_第2张图片

2.单Reactor、多线程

流程:select监听请求事件,accpet处理连接请求,创建handler用于处理该连接的后续请求;
      handler只负责响应事件,不做业务处理;通过read读取数据后分发到工作线程池的某一线程执行
      workehandler将处理结果返回给handler
      handler通过send将结果发送给client
优点:业务处理能力提升,充分利用多核CPU性能
缺点:多线程间数据访问和共享处理复杂
      reactor本是还是单线程运行,负责处理所有请求的事件的监听的响应,高并发下性能存在瓶颈

Java Reactor 线程模型 Netty 模型_第3张图片

3.主从Reactor、多线程

流程:reactor主线程acceptor处理连接事件
      mainReactor将连接分配给subReactor,subReactor将连接加入连接队列进行监听,并创建handler进行各种事件处理
      handler通过read读取数据后分发到工作线程池的某一线程执行,workehandler将处理结果返回给handler,handler通过send将结果发送给client
优点:业务结构再分层,提高使用性能瓶颈,数据交互清晰;
缺点:编程复杂度高

Java Reactor 线程模型 Netty 模型_第4张图片

二、Netty模型

1.概念原理图

1.BossGroup线程维护Selector,Accept处理连接事件,创建SocketChannel,封装为NIOSocketChannel并注册到Worker线程(事件循环)
2.Worker监听到感兴趣的事件后,就通过handler进行事件处理

Java Reactor 线程模型 Netty 模型_第5张图片

2.数据流向图

Java Reactor 线程模型 Netty 模型_第6张图片

1.Netty抽象出两组原型均为NioEventLoopGroup的线程池BossGroup、WorkerGroup
2.NioEventLoopGroup为一个事件循环组,每一个循环为NioEventLoop
3.NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个Selector,用于监听绑定在他上面的Socket网络通信
  ===> 轮询Accept
  ===> 处理连接事件,与Client建立连接,生成NIOSocketChannel,并将其注册到某个Worker的NioEventLoop的Selector上
  ===> 处理任务队列的任务
4.Pipeline管道,包含了Channel,用于逐层处理数据(编解码等)  

你可能感兴趣的:(Netty,学习,java,reactor线程模型,Netty,Netty模型)