libevent簡述

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核心原理

2. libevent實現https服務器

3. libevent和基於libevent的網絡編程

4. 處理大併發之四 libevent demo詳細分析

5. 使用 libevent 和 libev 提升網絡應用性能  ibm

6. libevent源碼分析

7. http://libevent.org/

相關文章
相關標籤/搜索