libevent是一個輕量級的基於事件驅動的高性能的開源網絡庫,而且支持多個平臺,對多個平臺的I/O複用技術進行了封裝,當咱們編譯庫的代碼時,編譯的腳本將會根據OS支持的處理事件機制,來編譯相應的代碼,從而在libevent接口上保持一致。html
在當前的服務器上,面對的主要問題就是要能處理大量的鏈接。而經過libevent這個網絡庫,咱們就能夠調用它的API來很好的解決上面的問題。編程
問題: 如何處理多個客戶端鏈接服務器
解決方案1:I/O複用技術:循環、poll、select、epoll。網絡
解決方案2:多線程技術或多進程技術數據結構
解決方案3:經常使用的上述兩者複合使用多線程
lievent也是採用的上述系統提供的select,poll和epoll方法來進行I/O複用,可是針對於多個系統平臺上的不一樣的I/O複用實現方式,libevent進行了從新的封裝,並提供了統一的API接口。libevent在實現上使用了事件驅動這種機制,其本質上是一種Reactor模式。併發
Reactor模式,是一種事件驅動機制。應用程序須要提供相應的接口並註冊到Reactor上,若是相應的事件發生,Reactor將主動調用應用程序註冊的接口,這些接口又稱爲「回調函數」。
在Libevent中也是同樣,向Libevent框架註冊相應的事件和回調函數;當這些事件發生時,Libevent會調用這些回調函數處理相應的事件。框架
lbevent的事件支持三種,分別是網絡IO、定時器和信號。定時器的數據結構使用最小堆(Min Heap),以提升效率。網絡IO和信號的數據結構採用了雙向鏈表(TAILQ)。函數
參考:源碼分析
1. Libevent核心原理
5. 使用 libevent 和 libev 提升網絡應用性能 ibm
6. libevent源碼分析