libevent 初始化与event_init

概述

在使用libevent函数以前,首先须要调用其event_init函数进行初始化。
初始化过程主要是建立一个全局默认的current_base变量,其类型为
struct event_base。

struct event_base对象变量可由eventn_base_new()函数建立并初始化。
libevent中,部分函数默认直接操做全局current_base,部分相同功能函数
可特别指定由event_base_new()建立的其余struct event_base变量,如:
    event_set()默认操做的全局current_base变量,
    event_base_set()则操做指定的event_base变量。
函数

event_init与event_base_new函数

    该函数将调用event_base_new()函数,建立并初始化一个struct event_base对象,
    并将该对象赋值给全局变量current_base,做为全局默认的event_base。oop

    event_base_new()则用于建立一个新的event_base结构对象,并对其进行初始化。
    初始化过程包括选择使用的IO事件模型,建立事件队列等。
性能

event_base结构

    struct event_base {
        const struct eventop *evsel;
        void                *evbase;
        int                  event_count;        /* counts number of total events */
        int                  event_count_active;/* counts number of active events */
        int                  event_gotterm;        /* Set to terminate loop */
        int                  event_break;        /* Set to terminate loop immediately */
        struct event_list  **activequeues;
        int                  nactivequeues;
        struct evsignal_info sig;
        struct event_list    eventqueue;
        struct timeval       event_tv; 
        struct min_heap      timeheap;
        struct timeval       tv_cache;
    };

    evsel:    当前使用的系统IO事件模型的抽象接口,event_base_new()函数会
                 按顺序检测可用的IO事件模型,该顺序为:
                  event ports, kqueue, epool, /dev/poll, poll, select.
    evbase:   evsel->init()的执行结果。在event_base_new()中,使用evsel->init()
                    的返回值判断特定的IO事件模型是否可用。(返回NULL则不可用)
    event_count:    当前event base中包含的事件数。
    event_count_active: 当前event base中活动的事件数。
    activequeues: 活动事件的队列。
    nactivequeues: activequeues的长度
    eventqueue:   当前event base中包含全部event的列表。
    event_tv:    在event_base_new中,设置为当前时间。
    timeheap:     libevent库使用一个最小堆结构,保存各个事件的超时时间,
                         从而能够优化超时判断的性能。优化

相关文章
相关标签/搜索