前言
之前说到过libevent是基于事件驱动模型的网络库,其中的事件,就是event
,它的确算是libevent中最核心的部分,而上一节说到的event_base
其实算是驱动部分,负责事件的各种处理。它们之间的关系是,一个event_base
对应多个event
。
下面主要讲解的是struct event
结构体,位于event.h
。
struct event
struct event {
/* 尾队列节点指针 用于保存所有注册了的I/O以及signal事件 以及激活的事件(其实libevent中的尾队列本质上就是一个双向链表)*/
TAILQ_ENTRY (event) ev_next; //已注册I/O事件链表
TAILQ_ENTRY (event) ev_active_next; //所有激活了的事件链表,通过遍历该链表进行调度
TAILQ_ENTRY (event) ev_signal_next; //已注册signal事件链表
unsigned int min_heap_idx