Reactor(反应堆)设计模式

2019-01-16  本文已影响86人  自负的鱼

Reactor(反应堆)设计模式

事件驱动模型,主要为解决多输入源请求多问题。线程池处理请求的问题会导致峰值线程资源耗尽,服务阻塞情况。这时候需要使用Reactor模式,通过多路复用分发思想大大减少线程的使用。

有一个Service Handler,多个Request Handler;Reactor模式没有使用消息队列作为缓冲,每当一个Event输入到Service Handler后,Service Handler会根据Event类型分发给不同的Request Handler进行处理。

Reactor设计模式主要角色

Reactor模式执行流程

  1. 初始化InitiationDispatcher,并初始化一个EventHandler和Handler映射map
  2. 注册EventHandler 到InitiationDispatcher,每个EventHandler包含对应Handler的映射关系
  3. 调用InitiationDispatcher的handler_event()方法启动EventLoop,阻塞等待Event到来
  4. 当某个或某些Handler的Event发生时,select()方法返回。InitiationDispatcher根据返回的Handler找到EventHandler,并调用handler_event()。
  5. EventHandler的handler_event()方法还是会向InitiationDispatcher注册新的EventHandler,例如当请求链接事件发生时,会重新注册EventHandler。

Reactor实现类

  1. InputSource 外部输入源,需要Reactor处理的原始类
  2. Event 事件类,根据原始输入源不同状态包装成一个事件,Reactor模式处理的都是Event事件
  3. EventType 枚举类型表示不同事件类型
  4. EventHandler 处理事件的Handler,包含不同事件处理器的公共逻辑
  5. AcceptEventHandler/ReadEventhandler 继承子EventHander具体事件的处理器实现类,根据事件的不同状态定义不同处理器
  6. Dispatcher 事件分发器,Reactor模式解决的主要问题就是接收到任务后快速分发处理器。
  7. Selector 事件轮训选择器,从轮训队列中取出事件状态,取出可以处理的所有事件
  8. Acceptor 事件接收器,负责初始化selector和接收缓冲队列
  9. Server 负责启动Acceptor服务,并启动相关服务接收缓冲队列
上一篇下一篇

猜你喜欢

热点阅读