Libevent 运用了大量的数据结构,
小根堆:
Libevent使用堆来管理Timer事件,其key值就是事件的超时时间,源代码位于文件min_heap.h中。
所有的数据结构书中都有关于堆的详细介绍,向堆中插入、删除元素时间复杂度都是O(lgN),N为堆中元素的个数,而获取最小key值(小根堆)的复杂度为O(1)。堆是一个完全二叉树,基本存储方式是一个数组。
哈希表:
通过evmap.c 中的evmap_io_add方法,将一个事件增加到io对象中,在evmap_io_add方法中有一个GET_IO_SLOT_AND_CTOR宏定义,该宏定义内部新创建并初始化一个event_map_entry,并通过一个哈希算法将该对象存放到哈希表一个合适的位置。之后通过TAILQ_INSERT_TAIL方法,将event对象附加到event的列表上
字典表:
circleQueue:
tailQueue:
sQueue:
List:
sList: