初學libevent庫

高性能的I/O框架庫libevent

linux服務器通常要處理的三類事件:I/O事件,信號,定時器
在處理這些事件時要考慮三個問題:
1 統一事件源
2 可移植性 不同系統使用不同的I/O複用方式
3 多進程/多線程中高併發編程的支持
libevent就解決了以上問題

I/O框架庫概述
I/O框架庫以庫函數的方式封裝了相對底層系統調用,爲應用程序提供便利的接口,
這些庫函數比較高效,健壯,穩定

libevent庫的特點:
1 跨平臺支持
2 統一事件源
3 線程安全
4 基於Reactor模式實現

基於Reactor模式實現的I/O框架庫libevent
幾個組件:

1 句柄
一個事件源和一個句柄綁定在一起,I/O事件對應的是文件描述符,信號對應的是信號值
2 事件多路分發器
將系統支持的I/O複用封裝成統一的接口,稱爲事件多路分發器
進行事件循環:等待事件並處理事件
3 事件處理器
   具體事件處理器
事件發生後執行的具體事件處理函數,在回調函數中執行具體的業務邏輯
4 Reactor
是libevent的核心
handle_event 事件循環
register_handler 往事件多路發生器中註冊一個事件
remove_handler 從事件多路分發器中刪除一個事件

使用步驟:以監聽socket爲例
    //創建reactor   統一事件源  socket I/O,信號,定時器
    struct event_base* base = event_init();
    //創建event事件
    struct event *listen_event = event_new(base, listenfd,  EV_READ|EV_PERSIST, ProcListenfd, NULL);
    //把event事件添加到reactor中
    event_add( listen_event, NULL );
    //啓動反應堆
    event_base_dispatch(base);//循環事件,如果事件發生進行處理
    //釋放事件資源
    event_free(listen_event);
    //關閉reactor
    event_base_free(base);

關於源碼剖析還需繼續學習。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章