libevent核心原理

Libevent 是一个轻量级的高性能网络库,事件驱动,基于 Reactor 模式。

对 Libevent 源码的阅读可围绕事件管理展开:

Libevent事件管理
Libevent 对三类事件源进行了统一,用 event 结构体表示,每个 event 实例表示一个事件。

同时监听多个事件(比如监听多个 socket 上的可读事件),必然会有多个 event 实例,对这些 event 实例进行管理需要特定的数据结构,Libevent 使用了尾队列(本质上是双向链表)和小根堆管理所有事件。

数据结构
各个数据结构的用途如下:

  • 已注册事件队列:所有事件添加时都会被插入到已注册事件队列
  • 激活事件队列:事件触发后,被插入激活事件队列
  • 信号事件队列:信号事件添加时会插入信号事件队列
  • 小根堆:定时器事件用小根堆管理,堆顶的定时器事件是超时时间最小的(最先超时)

向 Reactor(对应源码中的 event_base ) 中添加I/O、定时事件,需要调用 event_add 函数,信号事件调用 evsignal_addevsignal_add 最终也会调用 event_add

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值