Libev

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

libev由Marc Lehmann和Emanuele Giaquinta创建，以GPLv2协议发布。

与libevent的区别 
在设计理念上，创建libev是为了改进libevent中的一些架构决策。例如：

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

Libev的解决方案是：

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

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

libev的缺陷 
libev不支持Windows的IOCP。

參考資料 

C函式库
事件 (计算机)
自由發展元件與函式庫