高性能I/O框架库libevent
12.1 I/O框架库概述
基于Reactor模式的I/O框架库包含组件:句柄、事件多路分发器、具体事件处理器、Reactor。
- 句柄:I/O框架库要处理的对象,即I/O事件、信号和定时器,统一称为事件源。一个事件源通常和一个句柄绑定在一起。当内核检测到就绪事件时,通过句柄来通知应用程序。
- 时间多路分发器:事件的到来是随机的、异步的,因此程序需要循环地等待并处理事件,即事件循环。等待事件通常使用I/O复用技术来实现,I/O框架库一般将支持各种I/O服用系统调用封装成统一接口,称为事件多路分发器。
- 事件处理器:事件处理器执行事件对应的业务逻辑,通常包含一个或多个handle_event回调函数。I/O框架库提供的事件处理器通常是一个接口,需要继承它来实现自己的事件处理器。因此事件处理器的回调函数一般被声明为虚函数。一般还提供get_handle方法,返回与该事件关联的句柄。
- Reactor:handle_event(该方法执行事件循环,过程为:等待时间、处理所有就绪事件对应的事件处理器);register_handler(该方法调用时间多路分发器地register_event方法来往事件多路分发器中注册一个事件);remove_handler(该方法调用时间多路分发器地remove_event方法来删除事件多路分发器中的一个事件)。
12.2 Libevent源码分析
Libevent特点:
- 跨平台支持;
- 统一事件源;
- 线程安全;
- 基于Reactor模式实现。