1、利用了前置宣告來在c語言的基礎上進行封裝操作。即在include目錄下防止event.h等標頭檔案,在這些標頭檔案中只暴露struct的宣告卻不暴露其定義,對於如event_base等結構的操作均使用封裝的函式進行,而這些封裝的函式則定義在event.c中,event.c會包含event.h和event-internal.h,帶有internal字尾的標頭檔案才包含了這些結構體的實際定義。這樣保證了外部操作不會汙染內部結構體的內部資料,實現了封裝的效果。
2、libevent支援多種i/o多路復用技術的關鍵就在於結構體eventop,這個結構體前面也曾提到過,它的成員是一系列的函式指標, 定義在event-internal.**件中:
1struct
eventop ;
在libevent中,每種i/o demultiplex機制的實現都必須提供這五個函式介面,來完成自身的初始化、銷毀釋放;對事件的註冊、登出和分發。
比如對於epoll,libevent實現了5個對應的介面函式,並在初始化時並將eventop的5個函式指標指向這5個函式,那麼程式就可以使用epoll作為i/o demultiplex機制了。這樣利用函式指標的方式實現了多型。詳細介紹
關於libevent的詳細介紹專欄
概念理解 Libevent
可移植性 使用 libevent 編寫的程式應該在 libevent 支援跨越的所有平台上工作,即使沒有更好的方法來處理。非阻塞式io libevent也應該支援一般的方法使程式可以執行在某些限制的環境中.速度 libevent 試圖在每乙個平台實現最快的非阻塞式 io,而不會引入太多的額外開銷.可...
libevent幾個結構體的理解
struct event base struct event base 這裡要注意struct event list activequeues 為什麼用雙指標,這是因為很多事件的優先順序一致,所以用佇列陣列來存放,這樣導致有些事件不能第一時間處理 struct event 這裡主要理解幾個 tail...
GRASP個人理解
這裡是一篇比較全面的概覽 個人比較注重 開閉原則 對擴充套件開發對修改關閉 變與不變的分離 將變化的部分和不變的部分分開 組合 聚合復用原則 盡量使用類的組合復用,不要使用繼承 還有即使高內聚低耦合 實際上著名的gof模式也不盡都對這些原則遵循的很好,如訪問者模型,將原被訪問者的部分內部邏輯分離出去...