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).