libev

維基百科,自由的百科全書
跳至導覽 跳至搜尋

libev
原作者Marc Lehmann, Emanuele Giaquinta.
當前版本4.31(2019年12月21日,​6年前​(2019-12-21
原始碼庫
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
程式語言C語言
引擎
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    類型網絡函式庫
    許可協議GPLv2[1]

    libev是一個全功能和高性能的事件循環庫,libev 參考並模仿了libeventperl模塊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
    • 觀察器結構很大,因為它們將輸入/輸出、時間和信號處理程序合二為一。
    • 額外的組件(如httpdns伺服器)的實現質量參差不齊。
    • 計時器不精確,不能很好地處理時間跳躍。

    Libev的解決方案是:

    • 不使用全局變量,而是每個函數都有一個循環上下文
    • 對每種事件類型使用小的觀察器(一個I/O觀察器在x86_64機器上使用56位元組,而用libevent的話使用136位元組)。
    • 沒有http庫等組件。libev的功能非常少。
    • 允許更多事件類型,例如基於牆鍾時間或者單調時間的定時器、線程間中斷等等。

    更簡單地說,libev的設計遵循UNIX工具箱的哲學,儘可能好地只做一件事。

    libev的缺陷[編輯]

    libev不支持WindowsIOCP

    參考資料[編輯]

    1. ^ LICENSE. Github. [2020-02-25]. (原始內容存檔於2020-02-24). 
    2. ^ libev 的 README. [2020-02-25]. (原始內容存檔於2020-11-01). 
    3. ^ gvpe. software.schmorp.de. [2020-02-24]. (原始內容存檔於2020-12-02). 
    4. ^ rxvt-unicode. software.schmorp.de. [2020-02-24]. (原始內容存檔於2020-11-12). 
    5. ^ Audit. people.redhat.com. [2020-02-24]. (原始內容存檔於2021-01-19). 
    6. ^ Deliantra MMORPG. www.deliantra.net. [2020-02-24]. (原始內容存檔於2020-12-28). 
    7. ^ LICENSE. [2020-02-25]. (原始內容存檔於2020-02-24) (English). 
    8. ^ What's the difference between libev and libevent?. Stack Overflow. [2020-02-24]. (原始內容存檔於2017-02-06).