該檔案中包含了struct eventop,以及struct eventbase等結構。
//封裝了對event_base的操作
struct eventop
1.name
指定該後端eventop的名字。
2.init,dealloc,add,del,dispatch
libevent所支援的每種i/o 多路分發機制都必須事先這五個函式介面,分別用於其自身的初始化和銷毀,以及事件的註冊,登出以及分發(即執行)。
3.need_reinit
表明當前event_base是否需要重新生成.
4.features
表明當前所支援的i/o多路分發機制,二進位制位陣列表示。
5.fdinfo_len
對於擁有乙個或多個啟用事件的fd所記錄的額外首席資訊官度,作為每個fd的evmap入口的一部分,可作為以上add 和 del函式的引數。
//將訊號(或fds,當evmap_use_ht未定義時)對映到乙個事件鍊錶
struct event_signal_map
1. entries
乙個evmap_io* 或者evmap_signal*的陣列,空陣列為null
2.nentries
entries陣列中可用的entries的數量
//多數情況下libevent使用minheap管理超時事件,但有時使用表的方式更快捷,以下為針對"common"超時值得事件鍊錶
struct common_timeout_list
1.events
當前佇列中處於等待的事件鍊錶。
2.duration
用於表明佇列中事件的時長。
3,timeout_event
當佇列中某事件即將啟用時將會被觸發的事件。
4.base
表明該結構所屬的base物件。
//用於儲存前次eventop.dispatch的變化列表,僅當後台啟用changesets才會維護
struct event_changelist
//libevent最為核心的結構體,以下為其部分結構,具體的結構可檢視源**。
struct event_base
1. evsel 和 evbase
實際上evbase就是指的當前eventbase自身,而evsel則對i/o多路復用機制提供了封裝,其提供的介面可以用於操作evbase物件,如新增乙個事件時evsel->add(evbase,ev),實際執行的是evbase。evsel實際指向了全域性變數eventops中的乙個
2.changelist
告知後端下次執行事件分發時需要注意的變化 。
3.evsigsel
等同於evsel,但專門針對於訊號量事件。
4.event_running_priority
當前執行事件的優先順序。
5.io, sigmap
描述檔案描述符/訊號和已新增事件的對映關係的map。
6. eventqueue
所有已註冊到當前base中的事件鍊錶
7.timeheap
管理定時事件的小根堆。
8.event_tv 和 tv_cache
event_tv表明了dispatch上次返回,即i/o事件就緒的時間。tv_cache在dispatch返回後被設為當前系統時間,其快取了本次i/o就緒時的時間。實際上,event_tv的取值為tv_cache上一次的值。在處理就緒事件的過程中,gettime呼叫返回的是tv_cache的時間。
//以下兩個結構是關於當前base的配置結構
struct event_config_entry
//描述了想要分配的event_base配置資訊
struct event_config
libevent原始碼深度剖析
序幕 張亮上來當然要先誇獎啦,libevent 有幾個顯著的亮點 事件驅動 event driven 高效能 輕量級,專注於網路,不如ace那麼臃腫龐大 源 相當精煉 易讀 跨平台,支援windows linux bsd和mac os 支援多種i o多路復用技術,epoll poll dev pol...
libevent原始碼深度剖析
上來當然要先誇獎啦,libevent 有幾個顯著的亮點 事件驅動 event driven 高效能 輕量級,專注於網路,不如ace那麼臃腫龐大 源 相當精煉 易讀 跨平台,支援windows linux bsd和mac os 支援多種i o多路復用技術,epoll poll dev poll sel...
Libevent原始碼分析 開篇
出處 我所分析的libevent版本是2.0.21版本,是目前最新的穩定版本。看這系列博文中,需要讀者有linux程式設計的一些基礎。因為像posix 檔案描述符 多執行緒等等這些概念,我並不會去解釋,我預設讀者已經熟悉這些概念了。如果讀者讀過 unix環境高階程式設計 那就完全沒問題了。因為lib...