Chinaunix首页 | 论坛 | 博客
  • 博客访问: 480066
  • 博文数量: 111
  • 博客积分: 2332
  • 博客等级: 大尉
  • 技术积分: 1187
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-29 11:22
文章分类

全部博文(111)

文章存档

2013年(9)

2012年(28)

2011年(17)

2010年(28)

2009年(29)

我的朋友

分类: C/C++

2013-02-18 15:20:18

libevent中,每一个base维护着自己的事件相关的结构体。对于处于非active状态的事件,base分为timer事件,信号事件和io时间分别维护。其中timer事件放在timeheap中,io事件放在io中,信号事件放在sigmap中。timeheap是一个最小堆,io则是一个文件描述符和io对象的哈希表。
timeheap相关的定义为:min_heap就是min_heap_t,定义在minheap-internal.h的第38行。min_heap_t采用数组的方式来存储,min_heap_t中a为最小堆分配的空间数目,n为最小堆中元素的数目。
io相关的定义为:event_io_map定义在event-internal.h 115行。event_map_entry定义在evmap.c的77行,evmap_io定义在evmap.c的57行,HT_ENTRY定义在ht-internal.h的29行,HT_HEAD定义在ht-internal.h的11行。所以综合起来event_io_map的定义为
struct event_io_map {                                                
    /* The hash table itself. */                                       
    // struct event_map_entry **hth_table;
    struct event_map_entry {
        //HT_ENTRY(event_map_entry) 
        struct {                            
          struct event_map_entry *hte_next; 
          unsigned hte_hash;                
        }  map_node;
        
        evutil_socket_t fd;
        union { /* This is a union in case we need to make more things that can
                   be in the hashtable. */
            struct evmap_io evmap_io;
        } ent;
    }   **hth_table;     
                        
    /* How long is the hash table? */                                  
    unsigned hth_table_length;                                         
    /* How many elements does the table contain? */                    
    unsigned hth_n_entries;                                            
    /* How many elements will we allow in the table before resizing it?
    unsigned hth_load_limit;                                           
    /* Position of hth_table_length in the primes table. */            
    int hth_prime_idx;                                                 
}
event_io_map中的数据也是使用数组的方式来存储


base中的activequeues是存放激活的事件的队列,存储方式是链表
阅读(2360) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~