【轉載】libevent簡單流程

轉載自 這裏

事件處理流程
當應用程序向libevent註冊一個事件後,libevent內部是怎麼樣進行處理的呢?下面的圖就給出了這一基本流程。
1) 首先應用程序準備並初始化event,設置好事件類型和回調函數;這對應於前面第步驟2和3;

2) 向libevent添加該事件event。對於定時事件,libevent使用一個小根堆管理,key爲超時時間;對於Signal和I/O事件,libevent將其放入到等待鏈表(wait list)中,這是一個雙向鏈表結構;

3) 程序調用event_base_dispatch()系列函數進入無限循環,等待事件,以select()函數爲例;每次循環前libevent會檢查定時事件的最小超時時間tv,根據tv設置select()的最大等待時間,以便於後面及時處理超時事件;

當select()返回後,首先檢查超時事件,然後檢查I/O事件;
Libevent將所有的就緒事件,放入到激活鏈表中;
然後對激活鏈表中的事件,調用事件的回調函數執行事件處理;

這裏寫圖片描述

發佈了70 篇原創文章 · 獲贊 11 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章