libevent的event_base的特性配置相关接口

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农心语

您的鼓励是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值