啥是 Reactor 模式

Reactor 是啥

  • Reactor是一种事件驱动的设计模式

基本构成

  • 事件循环

    • 顾名思义,就是一个循环,是其核心部分;保证持续的监听多个事件源是否有事件发生;例如:是否有网络请求、是否有可读数据

  • 事件分发

    • 与事件循环紧密配合,当有事件发生时,将事件分发给对应的事件处理器

  • 事件处理

    • 针对不同类型的事件,有对应的事件处理,Reactor根据事件类型将事件分发给相应的事件处理器,执行相应的操作,如读取数据、解析请求...

模式架构

  • 单线程 Reactor

    • Reactor 线程既负责事件分发,也执行事件处理

  • 多线程 Reactor

    • Reactor 线程负责事件监听和分发,工作线程池执行事件处理

  • 多 Reactor

    • 主 Reactor 负责监听新的连接,子 Reactor 负责监听事件并处理

代码实现示例

首先总览一下这个 CReactor 类:

  • 事件循环 eventLoop() 循环监听处理事件

  • m_mainCEpoll 采用 Epoll 机制监听多个事件源,并返回触发事件

  • registerHandler、removeHandler、modifyHandler负责事件源的增删改

此类对 Reactor 的三中模式都有实现,所以拥有线程池从Reactor

定义了一个枚举,可直接选择当前想用的模式


再看看事件处理器部分:

  • 首先是定义了 CHandler 的接口类

  • 然后 监听器CAcceptor、处理器CClientHandler 继承CHandler后分别重载对应事件的处理


  • 当 Reactor单例 被构造时,会将 m_Acceptor监听器 加入 主Reactor 对应的m_mainCEpoll

  • 其次会构造好 m_threadPool 线程池,以便 单Reactor多线程、多Reactor 模式使用

  • 如果是 多Reactor模式,就让线程池运行 从Reactor 的事件循环


事件循环部分:

  • Epoll 循环监听,并返回就绪事件

  • 单Reactor单线程、多Reactor多线程,这两个模式都只需在 事件循环 所在的线程中处理就行

  • 而 单Reactor多线程 则是将事件交给线程池处理


单线程处理与多线程处理的部分:

  • 逻辑都是根据触发事件调用对应的处理器函数

  • 区别是单线程就在当前线程处理,多线程就分发给线程池处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值