Netty的Reactor多线程模型,NioEventLoop,ChannelPipeline简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty的Reactor多线程模型,NioEventLoop,ChannelPipeline简介相关的知识,希望对你有一定的参考价值。

参考技术A

如果在Google上搜索"Netty 高性能 易用",在找到的一大批文章,你大概率会看到这张图,外加关键字

NIO , Reactor多线程模型 , 异步串行无锁化 , 堆外内存 , pipeline ,翻看完这些文章后可以让你对Netty的原理有大致了解,但是Netty如何实现这些的呢? 本文将尽可能简单的解释Netty中Reactor多线程的实现,如有错误感谢指出.

Selector是NIO的重要组件, Selector上可以注册Channel. Channel在注册的时候会标注自己感兴趣的事件:

Channel,通道,为了便于理解,我把它分为 三类

Reactor多线程模型可以分为三块

mainReactor负责客户端接入

acceptor负责将接入的连接移交给subReactor

subReactor负责连接的读写

关键知识:

运行流程图

关键知识:

ChannelPipeline的设计思想是 责任链设计模式 ,是由ChannelHandlerContext组成的 双向链表 , ,首尾固定为 HeadContext 和 TailContext ,它们作为哨兵存在.当我们添加一个ChannelHandler到ChannelPipeline时,会先 包装成ChannelHandlerContext 再添加进去.

inbound事件传播

客户端向服务端发送消息,这个流向就称为inbound. 消息会从Head开始由左向右传递直到Tail,由Tail进行收尾操作

outbound事件传播

服务端向客户端发送信息,这个流向称为outbound,消息会从Tail开始由右向左传递知道Head,由Head进行收尾操作

异常传递

当某个ChannelHandler操作抛出异常,会从该handler开始向Tail传递.由Tail做收尾操作.

学习Netty,要理解Reactor模型,并把它和Netty的实现结合起来, 我学习Netty的时候就因为这块认识不深刻,浪费了很多时间也没有成效,共勉

https://blog.csdn.net/difffate/article/details/69458588

https://blog.csdn.net/jjzhk/article/details/39553613

https://www.jianshu.com/p/a9b2fec31fd1

https://www.jianshu.com/p/a9d030fec081

https://juejin.im/post/5b4570cce51d451984695a9b

https://www.jianshu.com/p/2461535c38f3

https://juejin.im/post/5a126b146fb9a0450c490201

Netty 4.x学习笔记——线程模型

目前存在的线程模型


  • 传统阻塞 I/O服务模型(阻塞式IO)

  • Reactor模式(反应器模式)



根据Reactor的数量和处理资源池线程的数量不同,有3种典型的实现

  • 单Reactor单线程

  • 单Reactor多线程

  • 主从Reactor多线程


   

Netty线程模式


主要基于主从Reactor多线程模型做了一定的改进,其中主从Reactor多线程模型有多个Reactor



传统阻塞 I/O服务模型


特点:

  1. 采用阻塞IO模式获取输入的数据

  2. 每个连接都需要独立的线程完成数据的输入,业务处理,数据返回

问题分析:

  • 当并发数很大,就会创建大量的线程,占用很大系统资源

  • 连接创建后,如果当前线程暂时没有数据可读,该线程会阻塞在read操作,造成线程资源的浪费   



Reactor模式


针对传统阻塞I/O服务模型的2个缺点,解决方案:

  1. 基于I/O复用模型:多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连接。当某个连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理。

  2. 基于线程池复用线程资源:不比比再为每个连接创建线程,将连接完成后的业务处理任务分配给线程进行处理,一个线程可以处理多个连接的业务。

针对 1 Reactor对应的叫法:反应器模式/分发者模式/通知者模式

以上是关于Netty的Reactor多线程模型,NioEventLoop,ChannelPipeline简介的主要内容,如果未能解决你的问题,请参考以下文章

Netty 4.x学习笔记——线程模型

6.netty线程模型-Reactor

BIO/NIO 线程模型以及高性能通讯框架 Netty Reactor 模型初探

Netty

分布式理论,架构设计 Netty

分布式理论,架构设计 Netty