Netty线程模型

该博客围绕Netty展开,需对Reactor线程模型有较好理解。Netty基于主从Reactor多线程模型改进,采用多主多从模式。介绍了简单版、进阶版和详细版,详细阐述了BossGroup和WorkerGroup的职责、NioEventLoopGroup及NioEventLoop的工作机制等。
概述

前提:要对Reactor线程模型有比较好的理解才行。

Netty主要基于主从Reactor多线程模型做了一定的改进,传统的是一主多从,这个是Netty是多主多从,可以有多个MainReactor。

简单版

在这里插入图片描述
说明:

  1. BossGroup是MainReactor组集合,为何selector,只关注IO的ACCEPT连接事件。相当于MainReactor组。
  2. WorkerGroup是SubReactor组集合,关注除ACCEPT以外的IO事件,比如READ、WRITE。
  3. 当接收到ACCEPT事件后,得到对应的SocketChannel,并封装成NIOSocketChannel,并注册到WorkGroup的某个SubReactor中。
  4. 当SubReactor监听到Read事件发生后,就进行处理(由Handler),Handler已经加入到了NIOSocketChannel中。
进阶版

在这里插入图片描述
多个MainReactor多个SubReactor。

详细版

在这里插入图片描述

说明:

  1. Netty抽象出两组线程池,BossGroup用于专门负责接口客户端的连接,WorkGroup专门用于负责数据的网络读写。
  2. BossGroup和WorkerGroup的类型都是NioEventLoopGroup。
  3. NioEventLoopGroup相当于一个事件循环组,这个组包含多个事件循环,每一个事件循环是NioEventLoop。
  4. NioEventLoop表示一个不断循环的执行任务的线程,每个NioEventLoop都有一个Selector,用于监听相关事件并作出反应。
  5. NioEventLoopGroup可以包含多个NioEventLoop。

每个BossGroup的NioEventLoop循环做三件事:

  • 轮询监听ACCEPT事件。
  • 响应处理ACCEPT事件,与client建立连接,生成NIOSocketChannel,并注册到某个WorkerGroup的NioEventLoop中。
  • 处理任务队列的任务,,即runAllTask。

每个WorkerGroup的NioEventLoop循环做的事情:

  • 轮询监控read、write事件。
  • 处理read、write事件,在各自的NIOSocketChannel里面,NIOSocketChannel封装了handler。
  • 处理任务队列任务,即runAllTask。

每个WorkerGroup的NioEventLoop处理事件时,会使用pipeline(管道)来处理,pipeline封装了channel,即通过pipeline可以获取对应的channel,pipeline中维护了很多处理器handler。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值