libevent核心原理

Libevent是一个高性能的网络库,采用事件驱动和Reactor模式。它统一管理三种事件源,并利用尾队列和小根堆来组织事件。事件注册、激活以及处理过程涉及已注册事件队列、激活事件队列、信号事件队列和定时器小根堆。事件循环通过epoll_wait监控I/O事件,处理信号和超时事件,调用相应的事件处理函数。
摘要由CSDN通过智能技术生成

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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值