libevent是一个轻量级的基于事件驱动的高性能的开源网络库,而且支持多个平台,对多个平台的I/O复用技术进行了封装,当咱们编译库的代码时,编译的脚本将会根据OS支持的处理事件机制,来编译相应的代码,从而在libevent接口上保持一致。html
在当前的服务器上,面对的主要问题就是要能处理大量的链接。而经过libevent这个网络库,咱们就能够调用它的API来很好的解决上面的问题。编程
问题: 如何处理多个客户端链接服务器
解决方案1:I/O复用技术:循环、poll、select、epoll。网络
解决方案2:多线程技术或多进程技术数据结构
解决方案3:经常使用的上述两者复合使用多线程
lievent也是采用的上述系统提供的select,poll和epoll方法来进行I/O复用,可是针对于多个系统平台上的不一样的I/O复用实现方式,libevent进行了从新的封装,并提供了统一的API接口。libevent在实现上使用了事件驱动这种机制,其本质上是一种Reactor模式。并发
Reactor模式,是一种事件驱动机制。应用程序须要提供相应的接口并注册到Reactor上,若是相应的事件发生,Reactor将主动调用应用程序注册的接口,这些接口又称为“回调函数”。
在Libevent中也是同样,向Libevent框架注册相应的事件和回调函数;当这些事件发生时,Libevent会调用这些回调函数处理相应的事件。框架
lbevent的事件支持三种,分别是网络IO、定时器和信号。定时器的数据结构使用最小堆(Min Heap),以提升效率。网络IO和信号的数据结构采用了双向链表(TAILQ)。函数
参考:源码分析
1. Libevent核心原理
5. 使用 libevent 和 libev 提升网络应用性能 ibm
6. libevent源码分析