libevent總結學習

2021-09-07 08:41:19 字數 1009 閱讀 8931

memcached用了libevent,但是redis沒有用libevent。redis的**還沒有libevent的三分之一。

libevent有下面幾大部分組成:

* 事件管理包括各種io(socket)、定時器、訊號等事件,也是libevent應用最廣的模組;

* 快取管理是指evbuffer功能;

* dns是libevent提供的乙個非同步dns查詢功能;

* http是libevent的乙個輕量級http實現,包括伺服器和客戶端

evbuffer和bufferevent的關係:

一言以蔽之,bufferevent使用了evbuffer,並且使用了兩份,讀入buffer和寫出buffer。另外bufferevent裡面還加了event。

說明bufferevent是乙個帶有緩衝區的i/o。也就是說,這個bufferevent知識多了兩個evbuffer,然後對event_set函式和event_add函式進行再次封裝!

通過我的這篇文章:

可以看出bufferevent主要函式是:

bufferevent *bev =bufferevent_socket_new(base, fd, bev_opt_close_on_free);

bufferevent_setcb(bev, socket_read_cb, null, socket_event_cb, null);

bufferevent_enable(bev, ev_read | ev_persist);

然後讀和寫是這樣的:

size_t len = bufferevent_read(bev, msg, sizeof(msg) - 1);

bufferevent_write(bev, reply, strlen(reply));

緩衝模組主要用於緩衝從網路接收到的資料,以及

使用者提交的資料(用於傳送)。很多時候,我們還需要將網路模組層(非tcp層)的這些緩衝資料拷貝到使用者層,而這些記憶體拷貝

都會消耗時間。

libevent學習總結

對libevent進行一下簡要的總結,libevent將socket 訊號事件 定時器進行統一管理 libevent首先會檢查操作支援那種型別的多路復用函式,檢查順序為 evport kqueue epoll devpoll poll select。主要研究了一下libevent 對socket的管...

libevent學習過程

libevent是工作時維護人家的 碰到的,得深入了解,記錄一下學習過程。首先的問題是libevent是什麼?查了一下,有個基本認識。libevent 是乙個用c語言編寫的 輕量級的開源高效能事件通知庫,主要有以下幾個亮點 事件驅動 event driven 高效能 輕量級,專注於網路。什麼是事件通...

libevent學習筆記 setvbuf 函式

函式名 setvbuf 用 法 int setvbuf file stream,char buf,int type,unsigned size type 期望緩衝區的型別 iofbf 滿緩衝 當緩衝區為空時,從流讀入資料。或者當緩衝區滿時,向流寫入數 據。iolbf 行緩衝 每次從流中讀入一行資料或...