文章字数:538,阅读全文大约需要2分钟
Reactor pattern
(反应器模式)是一种处理并发服务器请求,将请求提交给一个或者多个服务器处理程序的事件设计模式。机制是客户端使用一个线程监听连接请求,监听到后提交给另一个专门负责定时批量处理请求的非阻塞线程。node.js,netty等均使用这种设计模式实现
传统方法(thread-based architecture基于线程)
传统的应对服务器并发请求的方法是
- 死循环监听服务器请求
- 接收到请求开启一个线程处理此请求
这样带来了几个后果
- 产生大量线程,线程间切换需要消耗资源。
- 大量线程占用内存空间
- 处理请求的线程大部分时间用于等待输入
event-driven architecture(事件驱动)方法
Reactor设计模式就是事件驱动方法的实现之一。监听请求并转发给对应的事件处理器来执行。
组成角色
handle
(句柄/文件描述符)
事件的发源地,如socket、磁盘文件。
handle可能会发生的事件有:connection、ready for read、ready for write等。Synchronous Event Demultiplexer
(同步事件分离器)
阻塞等待Handles中的事件发生。Event Handler
(事件处理器的接口)Concrete Event Handler
(事件处理器实现)
事件处理器可能有多种,所以声明接口,使用接口调用。不同类型事件处理器具体实现不同。
和观察者模式对比
都是主体发生变化时通知依附的客体。
观察者模式是与单个事件源有关(发布),反应器模式与多个事件源关联。