Reactor模型简介

本文详细介绍了Reactor模型,包括其5种角色构成,如Handle是事件发源地,Synchronous Event Demultiplexer用于等待事件,Event Handler有回调方法等。还阐述了Reactor模式的执行流程,从事件处理器注册到事件响应等步骤,最后提到Doug Lea大师描述的Reactor模型意义相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Reactor模型

上图是对Reactor模型角色最权威的定义:

Reactor模式的角色构成(一共有5种角色):

1、Handle(句柄或描述符):

本质上是一种资源,是由操作系统提供的;改资源用于表示一个个事件,比如说文件描述符,或者是针对网络编程中的Socket描述符。事件既可以来自于外部,也可以来自于内部;外部事件比如说客户端的连接请求,客户端发送过来数据等;内部事件比如说操作系统产生的定时器事件等。它本质上就是一个文件描述符。Handle是事件产生的发源地;

2、Synchronous Event Demultiplexer(同步时间分离器):

它本身是一个系统调用,用于等待事件的发生(事件可能是一个,也可能是多个)。调用方法在调用它的时候会被阻塞,一直阻塞到同步事件分离器上有事件产生未知。对于Linux来说,同步事件分离器指的就是常用的I/O多路复用机制。比如说select、poll、epoll等。在Java NIO领域中,同步事件分离器对应的组件就是Selector;对应的阻塞方法就是select方法;

3、Event Handler(事件处理器):

本身由多个回调方法构成,这些回调方法构成了与应用相关的对于某个事件的反馈机制。Netty相比于Java NIO来说,在事件处理器这个角色上进行了一个升级,它为我们开发者提供了大量的回调方法,供我们在特定事件产生的时候实现相应的回调方法进行业务逻辑的处理。

4、Concrete Event Handler(具体事件处理器):

是事件处理器的实现。它本身实现了事件处理器所提供的各个回调方法,从而实现了特定于业务的逻辑。它本质上就是我们所编写的一个个处理器的实现

5、Initiation Dispatcher(初始化分发器):

实际上就是Netty中Reactor角色。它本身定义了一些规范,这些规范用于控制事件的调度方式,同时又提供了应用进行事件处理器的注册、删除等设施。它本身是整个事件处理器的核心所在,Initiation Dispatcher会通过同步时间分离器来等待事件的发生。一旦事件发生,Initiation Dispatcher会通过同步事件分离器来等待事件的发生。一旦事件发生,Initiation Dispatcher首先会分离出每一个事件,然后调用事件处理器,最后调用相关的回调方法来处理这些事件。

 


Reactor模式的执行流程

1、当应用向Initiation Dispatcher注册具体的事件处理器时,应用会标识出该事件处理器希望Initiation Dispatcher在某个事件发生的时候通知该事件,该事件与Handle关联。

2、Initiation Dispatcher会要求每个事件处理器向其传递内部的Handle。该Handle向操作系统标识了事件处理器。

3、当所有的事件处理器注册完毕之后,应用会调用handle_events方法来启动Initiation Dispatcher的事件循环。这时候,Initiation Dispatcher会将每个Handle合并起来,并使用同步事件分离器等待这些事件的发生。比如:TCP协议层使用select同步事件分离器来等待客户端发送的数据到达socket handle上;

4、当某个事件源对应的Handle变为ready状态的时候(比如说:TCP Socket变为等待读状态时候),同步事件分离器就会通知Initiation Dispatcher;

5、Initiation Dispatcher会触发事件处理器回调方法,从而响应这个处于ready状态的Handle。当事件发生时候,Initiation Dispatcher会将被事件源激活的Handle作为Key来寻找并分发恰当的事件处理器回调方法;

6、Initiation Dispatcher会回调事件处理器handle_events回调方法来执行特定于应用的功能(开发者自己所编写的业务逻辑),从而响应这个事件。所发生的事件类型可以作为该方法参数并被该方法内部使用来执行额外的特定于服务的分离与开发;


Doug Lea大师所描述的Reactor模型和上图所表达的意义相同

 

Initiation Dispatcher对应于Reactor角色

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值