event_io_map
event_list是双向链表,min_heap是小根堆,那event_io_map是什么呢?
#ifdef WIN32 #define EVMAP_USE_HT #endif #ifdef EVMAP_USE_HT #include "ht-internal.h" struct event_map_entry; HT_HEAD(event_io_map, event_map_entry); #else #define event_io_map event_signal_map #endif
在Linux系统中,event_io_map就是event_signal_map。
event_signal_map
struct event_signal_map { void **entries; // An array of evmap_io* or of evmap_signal* int nentries; // 数组大小 }; // 每个fd对应一个 struct evmap_io { struct event_list events; // 存放事件的链表 ev_uint16_t nread; // 读事件个数 ev_uint16_t nwrite; // 写事件个数 }; struct evmap_signal { struct event_list events; };
上一张镇楼图
可以看出,一个event_signal_map对应一个双向链表指针数组。同一个fd或signal的事件会放在同一个链表中。
(可以按照fd的值索引数据)
activequeues
对应一个双向链表数组,同一优先级的事件位于同一个链表中。数组大小初始为1。