(java)netty框架—reactor线程模型详解

Reactor模式是事件驱动设计模式的一种,主要分为单Reactor单线程、单Reactor多线程和主从Reactor多线程模型。单线程模型简单但可能引发性能瓶颈和可靠性问题;多线程模型能充分利用多核CPU,但处理复杂。Netty的线程模型采用了BossGroup和WorkerGroup,分别处理连接接受和网络读写,优化了事件处理效率。

Reactor 模式中 核心组成:

  1. Reactor:Reactor 在一个单独的线程中运行,负责监听和分发事件,分发给适当的处理程序来对 IO 事件做出反应。 它就像公司的电话接线员,它接听来自客户的电话并将线路转移到适当的联系人;
  2. Handlers:处理程序执行 I/O 事件要完成的实际事件,类似于客户想要与之交谈的公司中的实际官员。Reactor通过调度适当的处理程序来响应 I/O 事件,处理程序执行非阻塞操作。

单 Reactor 单线程

image-20230207004846654

  1. Select 是前面 I/O 复用模型介绍的标准网络编程 API,可以实现应用程序通过一个阻塞对象监听多路连接请求
  1. Reactor 对象通过 Select 监控客户端请求事件,收到事件后通过 Dispatch 进行分发
  2. 如果是建立连接请求事件,则由 Acceptor 通过 Accept 处理连接请求,然后创建一个 Handler 对象处理连接完成后的后续业务处理
  3. 如果不是建立连接事件,则 Reactor 会分发调用连接对应的 Handler 来响应
  4. Handler 会完成 Read→业务处理→Send 的完整业务流程

优缺点

优点:模型简单,没有多线程、进程通信、竞争的问题,全部都在一个线程中完成

缺点:

  • 性能问题,只有一个线程,无法完全发挥多核 CPU 的性能。Handler 在处理某个连接上的业务时,整个进程无法处理其他连接事件,很容易导致性能瓶颈
  • 可靠性问题,线程意外终止,或者进入死循环,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值