libevent 核心数据结构
libevent 是一个高性能的事件驱动网络库,其核心数据结构构成了整个框架的基础。以下是主要数据结构的详细说明:
一、事件循环核心结构
1. struct event_base
功能:事件循环的核心容器,管理所有事件和回调
关键成员:
struct event_base {
const struct eventop *evsel; // 底层I/O多路复用实现(epoll/kqueue等)
void *evbase; // 底层实现的私有数据
struct event_list **activequeues; // 活动事件队列
int nactivequeues; // 活动队列数量
struct event_list *eventqueue; // 所有已注册事件列表
struct timeval event_tv; // 最近一次事件处理时间
struct min_heap timeheap; // 定时器最小堆
struct evdns_base *evdns_base; // DNS解析器
// ...其他内部状态字段...
};
典型用法:
struct event_base *base = event_base_new();
event_base_dispatch(base);
二、事件相关结构
1. struct event
功能:表示一个具体的事件(I/O、定时器或信号)
关键成员:
struct event {
struct event_callback ev_evcallback; // 回调信息
union {
struct {
int ev_fd; // 关联的文件描述符
short ev_events; // 监听的事件类型
} ev_io;
struct {
struct event *ev_signal_next; // 信号事件链表
int ev_ncalls; // 回调执行次数
} ev_signal;
} ev_;
struct timeval ev_timeout; // 超时时间
int ev_pri; // 优先级
// ...其他内部字段...
};
事件类型标志: