libevent
libevent是一個异步事件處理軟體函式庫。libevent是一个提供异步事件通知的软件库。libevent提供了一組應用程序編程接口(API),libevent API提供的机制允许开发者为事件注册回调函式,例如文件描述符上的发生了特定事件或者等待特定事件超时,接收到信号的事件,常规的定时器超时事件。当事件發生時,libevent实例会执行回调函数。libevent 在设计上是用来替代很多事件驱动网络服务器自行实现的事件循环框架的。 也就是說,libevent可以用來取代網路伺服器所使用的事件循环檢查框架。
原作者 | Azat Khuzhin, Mark Ellzey, Nick Mathewson, Niels Provos |
---|---|
首次发布 | 2002年4月9日[1] |
当前版本 | 2.1.12(2020年7月5日 | )
源代码库 | |
平台 | 跨平臺 |
语言 | C語言、C++ |
类型 | 網路函式庫 |
许可协议 | BSD許可證[2] |
网站 | libevent |
libevent 现在支持 /dev/poll
,kqueue(2),POSIX select(2),Windows IOCP,poll(2),epoll(7),和 Solaris端口。libevent 对实时信号有试验性支持。libevent 暴露出的 API 在全平台都是一致的,因此 libevent 支持可移植的应用程序开发,并提供“操作系统上最可扩展的事件通知机制”[3]
开发者通过 libevent 注册信号回调,可以编写“安全”的信号处理程序,因为用户提供的信号处理程序都不会在信号 处理上下文中运行。
由於可以省去對網路的處理,且擁有不錯的效能,有些軟體使用libevent作為網路底層的函式庫,如:memcached、Tor。
libevent由Niels Provos创建,主要由Nick Mathewson维护[4],以BSD許可證发布[5]。
支持级别
目前libevent支持以下的方式判斷IO事件:
- poll(2)
- select(2)
- 幾乎所有的Unix平台都有提供的函式。
- /dev/pool
- 以Solaris平台為主。
- kqueue(2)
- 以BSD平台為主。
- epoll(2)
- 以Linux平台為主。
主要版本
使用 libevent 的著名软件
利用过 libevent 的一些著名的应用程序包括:
- Google Chrome: Google's Web 浏览器 (Mac 和 Linux 版本)
- Memcached: 一个高性能的分布式内存对象缓存系统[6]
- Transmission: 一个开源的 BitTorrent (协议)客户端。[7]
- ntpd: 网络时间协议 daemon [8]
- Tor: 一个匿名互联网通信系统[9]。
- tmux: 一个终端多路复用器 [10]
替代品
引用
- ^ libevent Releases. Github. [30 August 2019]. (原始内容存档于2020-06-18).
- ^ LICENSE. Github. [30 August 2019]. (原始内容存档于2021-03-29).
- ^ http://libevent.org/ (页面存档备份,存于互联网档案馆) Libevent web page
- ^ Mathewson, Nick. Nick Mathewson. Nick Mathewson's Homepage. [10 January 2015]. (原始内容存档于2020-10-27).
- ^ http://www.monkey.org/~provos/libevent/LICENSE (页面存档备份,存于互联网档案馆) License of libevent
- ^ memcached.h at Master. [2020-02-24]. (原始内容存档于2020-02-24).
- ^ libtransmission/trevent.c at Master at transmission/transmission - GitHub. [2020-02-24]. (原始内容存档于2020-02-24).
- ^ lib/isc/win32/app.c - ntp-project/ntp - GitHub.
- ^ src/lib/evloop/compat_libevent.c - torproject/tor - GitHub. [2020-02-24]. (原始内容存档于2020-02-24).
- ^ tmux/README at Master - tmux/tmux - GitHub. [2020-02-24]. (原始内容存档于2019-09-29).
外部連結
- (英文) libevent
.org,libevent的官方網站。 - (英文) The C10K problem,討論連線數破萬時會遇到的瓶頸。
- (英文) Libevent 2.0 book (页面存档备份,存于互联网档案馆), libevent 2.0参考书籍
- (英文) liboop - another asynchronous event notification library (页面存档备份,存于互联网档案馆),另一个异步事件库
- (英文) A benchmark by the libev author comparing libevent with libev, a similar library (页面存档备份,存于互联网档案馆),libevent与一个类似的库libev之间比较的基准测试程序