一,libevent的几个重要结构体

1,libevent简介

     libevent是一个轻量级的基于事件驱动的高性能的开源网络库,并且支持多个平台,对多个平台的I/O复用技术进行了封装,当我们编译库的代码时,编译的脚本将会根据OS支持的处理事件机制,来编译相应的代码,从而在libevent接口上保持一致。

2,even_base  

    libevent默认情况下是单线程的,可以配置成多线程,每个线程有且只有一个event_base,对应一个struct event_base结构体以及附于其上的事件管理器,用来调度托管给它的一系列event,可以和操作系统的进程管理类比。当一个事件发生后,event_base会在合适的时间,不一定是立即去调用绑定在这个事件上的函数,直到这个函数执行完,再去调度其他的事件。

    一个event_base上有两个链表:一条用于链接它管理所有的event;一条用于链接所有激活的event。

    还有一个最小堆用于管理超时事件。

struct event_base {
	const struct eventop *evsel;   /* 表示IO复用为哪种类型  */
	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 */

	/* active event management */
	struct event_list **activequeues;    /* 激活事件的链表 */
	int nactivequeues; /*激活链表是个二维的,表示激活链表数,可理解为行数,每一行挂的都是激活事*/

	/* signal handling info */
	struct evsignal_info sig;

	struct event_list eventqueue; /* 事件的链表 */
	struct timeval event_tv;

	struct min_heap timeheap;    /* 管理超时事件的最小堆 */

	struct timeval tv_cache;
};

       

3,何为事件

     libevent 用 struct event 结构体表示一个事件,事件分为三种:

      IO事件;

      信号事件;

      定时器超时事件。

     event 结构体必然要有对应的成员能够链接进event_base 里链表,以及最小堆索引指示它在event_base最小堆中的位置。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章