(二)什么是Reactor模式

Reactor模式(反应堆模式):

这便是libevent的中心思想。在常规的I/O多路复用中采用select和poll、epoll等来实现,而将这些机制封装而成的就是I/O多路复用模式,Reactor就是其中之一。通俗的来讲,它就是通过回调机制实现的。我们只需将事件的接口注册到Reactor上,当事件发生之后,会回调注册的接口。

比如你订闹钟明早六点半起床,那么在六点半之前你就可以安心睡觉,到了六点半,你的闹钟就会准时工作,叫你起床,而不是你一直等待你的闹钟响。订闹钟这个动作可以视为注册事件,而cpu(你)不用一直等它触发,而是可以处理其他任务,等到条件触发了,该事件才会被处理。

Reactor的组成:

Reactor模式需要有几个必要的组件:

  1. event demultiplexer(事件多路分发器):即一些I/O复用机制,如select、poll、epoll等。程序将事件源及事件注册到分发器上,等该事件触发时,就可以进行对应的处理了。拿epoll为例,假如采用的是epoll,那么其内部分别调用的接口其实就是epoll_create还有epoll_ctl之类的,不过做了层封装。
  2. handle(事件源):用于识别每一个事件,在linux上是文件描述符。
  3. reactor(反应器):它用于管理事件的调度以及注册删除事件等。当有激活的事件时,则调用其回调函数处理,如果没有的话,就运行事件主循环。在libevent中,对应event_base
  4. event handler(事件处理器):管理已经注册的事件和已经激活等待调度的事件,并分成了不同类型的事件(如读/写、信号),当事件发生时,会提供对应的处理程序。由Reactor调用。在libevent中,对应struct event

处理步骤

首先初始化Reactor管理器,然后注册事件并将事件的回调函数保存在事件处理器上,等待事件的发生,事件发生之后,便调度事件处理器,最后调用相应的回调函数处理事件。

大致的步骤如下:
1. 初始化一个Reactor管理器
2. 初始化事件处理器,设置事件源及回调函数
3. 将事件处理器注册到Reactor管理器上
4. 注册该事件
5. 进入循环等待事件发生并处理

其他

既然都提到了Reactor模式,那么Proactor模式也可以顺便一起了解下。Proactor模式是一种异步I/O模式,而Reactor模式是一种同步I/O模式,。
异步I/O是指从你发起I/O请求到完成I/O这些过程都是内核帮你完成了,你只用在调用了读/写操作之后,等着系统通知你I/O已经完成了然后你再做后序操作就行了,所以异步I/O是不会导致进程阻塞的。然而同步I/O即当I/O操作可以操作时,再提醒你进行操作。

接下来,我们先从大体上观摩一下libevent的源文件结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值