目录
2. event_base的特性配置
2.1 event_base_get_features
功能:
获取event_base实现的相关。
备注:
其中每个特性是通过二进制位OR方式来组合的。
特性列表由event_method_feature给出。包括:
-
EV_FEATURE_ET = 0x01 边缘触发
-
EV_FEATURE_O1 = 0x02
事件触发后时间处理的复杂度是O(1),这样就排除了复杂度是O(N)或者N的异步IO模型。 -
EV_FEATURE_FDS = 0x04 同时允许文件描述符和socket
-
EV_FEATURE_EARLY_CLOSE = 0x08 支持不需要通过读取pending状态的数据,而是通过采用EV_CLOSED来探测连接是否关闭
原型:
int event_base_get_features(const struct event_base *base);
2.2 event_base_init_common_timeout
功能
对于大量相同超时时间的定时器进行优化设置,允许这些具有相同超时时间的超时定时器通过队列进行管理,从而提升性能。
备注
libevent默认是采用最小堆的方式来管理定时器的,这对于每个定时器的超时时间是随机分布的情况下可以运行得很好,但是如果大量的定时器都具有相同的超时时间,那么通过采用一个FIFO的队列来管理这些定时器能够一定程度上降低性能的消耗。通过本函数,libevent可以为我们创建一个新的FIFO的定时器管理队列,该队列对应的事件超时时间由duration来指定。
原型
const struct timeval *event_base_init_common_timeout(struct event_base *base,
const struct timeval *duration);
2.3 event_base_get_method
功能
获取libevent采用的内核事件通知机制,如epoll, select, poll 等等
原型
const char *event_base_get_method(const struct event_base *eb);
2.4 event_base_get_signal_method
功能
获取libevent采用的内核signal处理机制。
包括:
- signalfd_signal
- signal
- kqueue_signal
原型
const char *event_base_get_signal_method(const struct event_base *eb);
2.5 event_base_priority_init
功能:
设置event_base的优先级队列的数量
备注
libevent调度默认以相同优先级所有活跃状态的事件。然后,有时候,我们可能希望处理以高于其他事件的优先级处理某些时间。因为这个原因,所以libevent支持优先级队列,高优先级的活跃事件总是在低优先级的事件之前处理。
libevent中优先级值越小优先级越高。
本函数用来指定最大允许的不同优先级的数量,本函数需要在第一次调用event_base_dispatch之前调用来设置优先级数量。一旦设置完成,可以通过event_priority_set函数来对一个event事件来设置其优先级。除非手工指定,libevent默认给一个事件设置处于中间的优先级。
注意:高优先级的事件会让低优先级的事件”饿死“。如果当处理完高优先级的事件回调后,libevent在处理低优先级事件之前,会重新检查是否有更紧急的事件需要处理,这样可能会导致低只要有高优先级的事件,优先级的时间永远得不到处理。
原型:
int event_base_priority_init(struct event_base *eb, int npriorities);
2.6 event_base_get_npriorities
功能
获取通过 event_base_priority_init设置的优先级队列的个数。
原型
int event_base_get_npriorities(struct event_base *eb);
2.7 event_get_supported_methods
功能
获取libevent底层可以支持的异步io模型的列表。
备注
返回的是一个字符串数组,并且调用者有责任在使用完毕后回收内存。
其中method的排列顺序是按照libevent的首选优先级排序的。
原型
const char ** event_get_supported_methods(void);