Reactor模型专题

一,简介

网络编程模型通常有如下几种:Reactor, Proactor, Asynchronous, Completion Token, and Acceptor-Connector。通常网络编程模型处理的主要流程如下

initiate => receive => demultiplex => dispatch => process events

I/O多路复用可以用作并发事件驱动(event-driven)程序的基础,即整个事件驱动模型是一个状态机,包含了状态(state), 输入事件(input-event), 状态转移(transition), 状态转移即状态到输入事件的一组映射。通过I/O多路复用的技术检测事件的发生,并根据具体的事件(通常为读写),进行不同的操作,即状态转移。

Reactor模式是一种典型的事件驱动的编程模型Reactor逆置了程序处理的流程,其基本的思想即为Hollywood Principle— 'Don't call us, we'll call you'.

普通的函数处理机制为:调用某函数-> 函数执行, 主程序等待阻塞-> 函数将结果返回给主程序-> 主程序继续执行

Reactor事件处理机制为:主程序将事件以及对应事件处理的方法在Reactor上进行注册, 如果相应的事件发生Reactor将会主动调用事件注册的接口,即 回调函数. libevent即为封装了epoll并注册相应的事件(I/O读写,时间事件,信号事件)以及回调函数,实现的事件驱动的框架

Reactor事件处理机制的编程模型,在Redis中也得到了很好的运用,Redis中基于I/O多路复用(mutiplexing) 开发Reactor事件处理机制,监听多个套接字的AE_READABLE读,AE_WRITABLE写事件。读事件绑定读操作和具体执行命令的操作函数,写事件绑定命令回复的操作函数

二,架构

Reactor架构模式允许事件驱动的应用通过多路分发的机制去处理来自不同客户端的多个请求。

事件(事件源)

在网络编程中就是一个Socket,在数据库操作中就是一个DBConnection

linux上为文件描述符,handler即为注册在特定事件上的程序,事件发生通常在linux下为I/O事件,由操作系统触发

Reactor (反应器)

事件管理的接口,内部使用event demultiplexer注册,注销事件;并运行事件循环,当有事件进入"就绪"状态时,调用注册事件的回调函数处理事件

Event demultiplexer(事件多路分发机制)

通常是由操作系统提供的I/O多路复用的机制,例如selectepoll. 程序首先将handler(事件源)以及对应的事件注册到event demultiplexer上;当有事件到达时,event demultiplexer就会发出通知,通知Reactor调用事件处理程序进行处理

Event Handler(事件处理程序)

事件处理器,可以根据事件的不同状态创建处理不同状态的处理器

事件处理程序提供了一组接口,在Reactor相应的事件发生时调用,执行相应的事件处理,通常会绑定一个有效的handler

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nathaniel333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值