Reactor(反应堆)设计模式
2019-01-16 本文已影响86人
自负的鱼
Reactor(反应堆)设计模式
事件驱动模型,主要为解决多输入源请求多问题。线程池处理请求的问题会导致峰值线程资源耗尽,服务阻塞情况。这时候需要使用Reactor模式,通过多路复用分发思想大大减少线程的使用。
有一个Service Handler,多个Request Handler;Reactor模式没有使用消息队列作为缓冲,每当一个Event输入到Service Handler后,Service Handler会根据Event类型分发给不同的Request Handler进行处理。
Reactor设计模式主要角色
- EventHandler:事件处理器,可以根据事件的不同状态创建不同状态处理器。
- Handler:可以理解为事件,网络编程中为Socket,在数据库中为DBConnection
- InitiationDispatcher:用于管理EventHandler,分发event容器,是一个事件处理器。
- Demultiplexer:阻塞等待Handler中事件的到来。
Reactor模式执行流程
- 初始化InitiationDispatcher,并初始化一个EventHandler和Handler映射map
- 注册EventHandler 到InitiationDispatcher,每个EventHandler包含对应Handler的映射关系
- 调用InitiationDispatcher的handler_event()方法启动EventLoop,阻塞等待Event到来
- 当某个或某些Handler的Event发生时,select()方法返回。InitiationDispatcher根据返回的Handler找到EventHandler,并调用handler_event()。
- EventHandler的handler_event()方法还是会向InitiationDispatcher注册新的EventHandler,例如当请求链接事件发生时,会重新注册EventHandler。
Reactor实现类
- InputSource 外部输入源,需要Reactor处理的原始类
- Event 事件类,根据原始输入源不同状态包装成一个事件,Reactor模式处理的都是Event事件
- EventType 枚举类型表示不同事件类型
- EventHandler 处理事件的Handler,包含不同事件处理器的公共逻辑
- AcceptEventHandler/ReadEventhandler 继承子EventHander具体事件的处理器实现类,根据事件的不同状态定义不同处理器
- Dispatcher 事件分发器,Reactor模式解决的主要问题就是接收到任务后快速分发处理器。
- Selector 事件轮训选择器,从轮训队列中取出事件状态,取出可以处理的所有事件
- Acceptor 事件接收器,负责初始化selector和接收缓冲队列
- Server 负责启动Acceptor服务,并启动相关服务接收缓冲队列