一,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最小堆中的位置。

 

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