Libevent 是一個用C語言編寫的、輕量級的開源高性能事件通知庫,主要有以下幾個亮點:事件驅動( event-driven),高性能;輕量級,專注于網絡,不如 ACE 那么臃腫龐大;源代碼相當精煉、易讀;跨平臺,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多種 I/O 多路復用技術, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定時器和信號等事件;注冊事件優先級。
libevent的流程可以分為三步:定義框架,注冊事件,啟動事件循環(epoll檢測事件是否發生,發生的時候,通知子線程調用回調函數//此過程會阻塞)下圖為編寫的框架
// 創建框架 struct event_base* base = NULL;base = event_base_new();// 添加事件struct event* ev = NULL;ev = event_new(base, fd, EV_READ | EV_PERSIST, read_cb, NULL);event_add(ev, NULL);// 事件循環event_base_dispatch(base);// 釋放資源event_free(ev);event_base_free(base);close(fd);return 0;
}
?Reactor:事件源(描述符)、Reactor 框架、多路復用機制和事件處理程序
事件源可以理解為我們的文件描述符,多路復用機制是我們的IO模型(select,poll,epoll),事件處理程序理解為回調函數。