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庫使用一個最小堆結構,保存各個事件的超時時間,
                         從而能夠優化超時判斷的性能。優化

相關文章
相關標籤/搜索