libev

libev 是一个全功能和高性能的事件循环库,libev 参考并模仿了 libeventperl 模块 Event[1]。它用于GNU虚拟专用以太网[2]、rxvt-unicode[3]、auditd[4]、Deliantra MORPG[5]服务器和客户端以及许多其他程序。node.js 曾经嵌入了 libev,现在更换为了 libuv

libev
原作者Marc Lehmann, Emanuele Giaquinta.
穩定版本
4.31
(2019年12月21日2019-12-21
编程语言C語言
类型網路函式庫
许可协议GPLv2[6]
网站software.schmorp.de/pkg/libev.html 

libev 由 Marc Lehmann 和 Emanuele Giaquinta 创建,以GPLv2协议发布[7]

libevent 的区别

在设计理念上,创建 libev 是为了改进 libevent 中的一些架构决策[8]。例如,

  • 全局变量的使用使得在多线程环境中很难安全地使用libevent
  • 观察器结构很大,因为它们将输入/输出、时间和信号处理程序合二为一。
  • 额外的组件(如httpdns服务器)的实现质量参差不齐。
  • 计时器不精确,不能很好地处理时间跳跃。

Libev 的解决方案是

  • 不使用全局变量,而是每个函数都有一个循环上下文
  • 对每种事件类型使用小的观察器(一个I/O观察器在 x86_64 机器上使用 56 字节,而用 libevent 的话使用136字节)。
  • 没有 http 库等组件。libev 的功能非常少。
  • 允许更多事件类型,例如基于wall clock或者单调时间的定时器、线程间中断等等。

更简单地说,libev 的设计遵循UNIX工具箱的哲学,尽可能好地只做一件事。

libev 的缺陷

libev 不支持 WindowsIOCP

參考資料

  1. . [2020-02-25]. (原始内容存档于2020-11-01).
  2. . software.schmorp.de. [2020-02-24]. (原始内容存档于2020-12-02).
  3. . software.schmorp.de. [2020-02-24]. (原始内容存档于2020-11-12).
  4. . people.redhat.com. [2020-02-24]. (原始内容存档于2021-01-19).
  5. . www.deliantra.net. [2020-02-24]. (原始内容存档于2020-12-28).
  6. . Github. [25 Feburary 2020]. (原始内容存档于2020-02-24).
  7. . [2020-02-25]. (原始内容存档于2020-02-24) (英语).
  8. . Stack Overflow. [2020-02-24]. (原始内容存档于2017-02-06).
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.