Libev
頁面Module:Infobox/styles.css沒有內容。
| 腳本錯誤:沒有「InfoboxImageVariant」這個模塊。 | |
| 原作者 | Marc Lehmann, Emanuele Giaquinta. |
|---|---|
| 當前版本 | 4.31(2019年12月21日) |
| 程式語言 | C語言 |
| 類型 | 網路函式庫 |
| 許可協議 | GPLv2[1] |
| 網站 | 腳本錯誤:沒有「WikidataIB」這個模塊。 |
| 腳本錯誤:沒有「Template wrapper」這個模塊。 | |
libev是一個全功能和高性能的事件循環庫,libev 參考並模仿了libevent和perl模塊Event[2]。它用於GNU虛擬專用乙太網[3]、rxvt-unicode[4]、auditd[5]、Deliantra MORPG[6]伺服器和客戶端以及許多其他程序。node.js曾經嵌入了libev,現在更換為了libuv。
libev由Marc Lehmann和Emanuele Giaquinta創建,以GPLv2協議發布[7]。
與libevent的區別[編輯]
在設計理念上,創建libev是為了改進libevent中的一些架構決策[8]。例如:
- 全局變量的使用使得在多線程環境中很難安全地使用libevent。
- 觀察器結構很大,因為它們將輸入/輸出、時間和信號處理程序合二為一。
- 額外的組件(如http和dns伺服器)的實現質量參差不齊。
- 計時器不精確,不能很好地處理時間跳躍。
Libev的解決方案是:
- 不使用全局變量,而是每個函數都有一個循環上下文。
- 對每種事件類型使用小的觀察器(一個I/O觀察器在x86_64機器上使用56位元組,而用libevent的話使用136位元組)。
- 沒有http庫等組件。libev的功能非常少。
- 允許更多事件類型,例如基於牆鍾時間或者單調時間的定時器、線程間中斷等等。
更簡單地說,libev的設計遵循UNIX工具箱的哲學,儘可能好地只做一件事。
libev的缺陷[編輯]
參考資料[編輯]
- ↑ package.lua第80行Lua錯誤:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua錯誤:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua錯誤:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua錯誤:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua錯誤:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua錯誤:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua錯誤:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua錯誤:module 'Module:Citation/CS1/Identifiers' not found