libevent原始碼學習 第二天

2021-06-17 16:02:48 字數 1850 閱讀 9882

該檔案中包含了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...