libevent(四)event_base 2

接上文libevent(三)event_base

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。

转载于:https://www.cnblogs.com/gattaca/p/7681263.html

猜你喜欢

转载自blog.csdn.net/weixin_34279246/article/details/93401902