Netty--Reactor模型

上一篇博客讲了Netty创建事件循环组对象。本篇博客对Netty的Reactor模型中事件循环组对象所起的具体作用做一个介绍。

Reactor模型

Reactor模型分类

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

  1. 单Reactor 单线程
  2. 单Reactor 多线程
  3. 多Reactor 多线程
单Reactor 单线程

在这里插入图片描述
上图就是单Reactor 单线程模型图

  1. select 就是多路复用I/O的选择器
  2. Reactor 通过select对象监听客户端的请求事件,接受到事件后通过Dispatch分发
  3. 如果是连接请求,则有Acceptor 通过该Accept 处理连接请求,然后创建一个handler 对象处理
  4. 如果不是连接请求,左右dispatch分发到对应的handler来处理
  5. Handler 会处理 read --> 业务处理 --> send 的完整业务流程

上图模型,通过select(多路复用I/O)搞定所有的的操作(连接,读,写等),简单明了。但是如果客户端连接数量较多,那么单线程的模式将很难支撑。

单Reactor多线程模型

在这里插入图片描述
上图是单Reactor 多线程的模型图
与单Reactor 单线程模型相比, 具体的业务处理会有线程池创建线程来处理。handler只负责处理read 和 send 业务。这种模型可以充分利用多核CPU的能力。但是多线程之间的数据共享和访问会比较复杂。

主从Reactor多线程模型

在这里插入图片描述
与单Reactor多线程模型相比,主从Reactor多线程模型就是将客户的连接请求和读写请求分给了不同的Reactor来处理。主Reactor负责处理客户端的连接请求,并将客户端分配给从Reactor 当客户端发生读写请求时,就有从Reactor来做出响应。

这样主从Reactor模型,使得Reactor的职责更加简单与客户端之间的交互也更加明确,主Reactor只需要完成客户端的连接,其他的业务请求只需要交给从Reactor来处理就好。

Netty的模型就类似与主从Reactor模型。

Netty的模型图

在这里插入图片描述
对Netty的模型图做一个简单的说明:

  1. Netty抽象出两组线程池BossGroup和WorkerGroup。BossGroup专门负责处理客户端的连接,WorkerGroup负责客户端的读写。
  2. BossGroup和WorkerGroup 类型都是NioEventLoopGroup
  3. NioEventLoopGroup相当于一个事件循环组,这个组中可以含有多个循环事件,每一个循环事件的类型都是NioEventLoop
  4. NioEventLoop表示一个不断循环执行业务的线程,每个NioEventLoop上都有一个select,这个select就是用于监听绑定在其上的客户端的socket通讯
  5. NioEventLoopGroup 可以含有多个NioEventLoop 也可以只含有一个
  6. 每个BossGroup中的NioEventLoop循环执行有三个步骤:
    a:轮询accept事件
    b:处理accept事件,与客户端建立连接,生成NioSocketChannel,并将其注册到WorkerGroup中的NioEventLoop的select上去。
    c:处理任务队列中的任务,即runAllTasks
  7. 每个WorkerGroup 中的NioEventLoop循环执行的步骤:
    a:轮询客户端的read,write事件
    b:处理I/O事件,即read,write事件,在对应的NioSocketChannel中处理。
    c:处理任务队列中的任务。即runAllTasks
  8. 在上图中,WorkerGroup中的NioEventLoop中处理I/O事件是会到相应的pipeline中执行处理,这个pipeline中包含了客户端与服务器之间的NioSocketChannel以及很多的handler处理器。而NioSocketChannel中有包含了相应的pipeline,也就是说通过NioSocketChannel可以得到相应的pipeline,通过pipeline也能找到相应的NIoSocketChannel。

在上一篇博客中讲述了Netty中NioEventLoopGroup的创建过程,也即是BossGroup和WorkerGroup的创建过程。这篇博客就是对这两个group的具体作用以及Netty的模型做下简述。
若有错误的地方望请指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值