0%

Reactor模式

文章字数:538,阅读全文大约需要2分钟

Reactor pattern(反应器模式)是一种处理并发服务器请求,将请求提交给一个或者多个服务器处理程序的事件设计模式。机制是客户端使用一个线程监听连接请求,监听到后提交给另一个专门负责定时批量处理请求的非阻塞线程。node.js,netty等均使用这种设计模式实现

传统方法(thread-based architecture基于线程)

传统的应对服务器并发请求的方法是

  1. 死循环监听服务器请求
  2. 接收到请求开启一个线程处理此请求

这样带来了几个后果

  1. 产生大量线程,线程间切换需要消耗资源。
  2. 大量线程占用内存空间
  3. 处理请求的线程大部分时间用于等待输入

event-driven architecture(事件驱动)方法

Reactor设计模式就是事件驱动方法的实现之一。监听请求并转发给对应的事件处理器来执行。
组成角色

  1. handle(句柄/文件描述符)
    事件的发源地,如socket、磁盘文件。
    handle可能会发生的事件有:connection、ready for read、ready for write等。
  2. Synchronous Event Demultiplexer(同步事件分离器)
    阻塞等待Handles中的事件发生。
  3. Event Handler(事件处理器的接口)
  4. Concrete Event Handler(事件处理器实现)
    事件处理器可能有多种,所以声明接口,使用接口调用。不同类型事件处理器具体实现不同。

和观察者模式对比

  1. 都是主体发生变化时通知依附的客体。

  2. 观察者模式是与单个事件源有关(发布),反应器模式与多个事件源关联。