。非同步事件庫本質上是提供非同步事件通知(asynchronous event notification,aen)的。非同步事件通知機制就是根據發生的事件,呼叫相應的**函式進行處理。
事件(event):事件是非同步事件通知機制的核心,比如fd事件、超時事件、訊號事件、定時器事件。有時候也稱事件為事件處理器(eventhandler),這個名稱更形象,因為handler本身表示了包含處理所需資料(或資料的位址)和處理的方法(**函式),更像是物件導向思想中的稱謂。
事件迴圈(eventloop):等待並分發事件。事件迴圈用於管理事件。
對於應用程式來說,這些只是非同步事件庫提供的api,封裝了非同步事件庫跟作業系統的互動,非同步事件庫會選擇一種作業系統提供的機制來實現某一種事件,比如利用unix/linux平台的epoll機制實現網路io事件,在同時存在多種機制可以利用時,非同步事件庫會採用最優機制。
libevent :名氣最大,應用最廣泛,歷史悠久的跨平台事件庫;
libev :較libevent而言,設計更簡練,效能更好,但對windows支援不夠好;
libuv :開發node的過程中需要乙個跨平台的事件庫,他們首選了libev,但又要支援windows,故重新封裝了一套,linux下用libev實現,windows下用iocp實現;
可見,目前libuv的影響力最大,其次是libevent,libev關注的人較少。
特性libevent
libev
libuv
優先順序啟用的事件組織在優先順序佇列中,各類事
件預設的優先順序是相同的,可以通過設定
事件的優先順序使其優先被處理
也是通過優先順序佇列來管理啟用的時間,
也可以設定事件優先順序
沒有優先順序概念,按照固定的順序訪
問各類事件
事件迴圈
event_base用於管理事件
啟用的事件組織在優先順序佇列中,各類事件預設的優先順序是相同的,
可以通 過設定事件的優先順序 使其優先被處理
執行緒安全
event_base和loop都不是執行緒安全的,乙個event_base或loop例項只能在使用者的乙個執行緒內訪問(一般是主線程),註冊到event_base或者loop的event都是序列訪問的,即每個執行過程中,會按照優先順序順序訪問已經啟用的事件,執行其**函式。所以在僅使用乙個event_base或loop的情況下,**函式的執行不存在並行關係
type
libevent
libev
libuv
iofd
iofs_event
計時器(mono clock)
timer
timer
timter
計時器(wall clock)
--periodic
--訊號
signal
signal
signal
程序控制
--child
process
檔案stat
--stat
fs_poll
每次迴圈都會執行的idle事件
--idle
idle
迴圈block之前執行
--prepare
prepare
迴圈blcck之後執行
--check
check
巢狀loop
--embed
--fork
--fork
--loop銷毀之前的清理工作
--cleanup
--操作另乙個執行緒中的loop
--async
async
stream ( tcp, pipe, tty )
stream ( tcp, pipe, tty )
stream ( tcp, pipe, tty )
stream ( tcp, pipe, tty )
這個對比對於libev和libuv更有意義,對於libevent,很多都是跟其設計思想有關的。 libev中的embed很少用,libuv沒有也沒關係;cleanup完全可以用libuv中的async_exit來替代;libuv沒有fork事件。
三個庫都支援linux, *bsd, mac os x, solaris, windows
type
libevent
libev
libuv
dev/poll (solaris)yy
yevent portsyy
ykqueue (*bsd)yy
yposix selectyy
ywindows selectyy
ywindows iocpyn
ypollyy
yepollyy
y對於unix/linux平台,沒有什麼大不同,優先選擇epoll,對於windows,libevent、libev都使用select檢測和分發事件(不i/o),libuv在windows下使用iocp。libevent有乙個socket handle, 在windows上使用iocp進行讀寫。libev沒有類似的。但是libevent的iocp支援也不是很好(效能不高)。所以如果是在windows平台下,使用原生的iocp進行i/o,或者使用libuv。
Memcache VS Redis 簡單對比
系統業務以純kv的快取為主,資料量大,併發業務量大,memcache比較合適 memcache將所有資料儲存在物理記憶體中,redis則有自己的vm機制,當資料超量時,會引發swap,影響效能 memcache使用多執行緒的模式 主線程監聽,work子執行緒工作 而redis使用單執行緒,難以充分利...
PO DTO的簡單對比
po persistent object 持久化物件,它跟持久層 通常是關係型資料庫 的資料結構形成一一對應的對映關係,如果持久層是關係型資料庫,那麼,資料表中的每個字段 或若干個 就對應po的乙個 或若干個 屬性。dto data transfer object 資料傳輸物件,這個概念 於j2ee...
FPGA ASIC CPU GPU 簡單對比 初識
ai 領域 fpga asic cpu gpu 簡單對比 簡介cpu 處理器 central processing unit,cpu 是一塊超大規模的積體電路,是一台計算機的運算核心 core 和控制核心 control unit 它的功能主要是解釋計算機指令以及處理計算機軟體中的資料。gpu 圖形...