libevent_定时器集成

本文介绍了libevent库中定时器的集成策略,通过使用小根堆来管理Timer事件,确保高效的事件处理。集成策略包括根据最小超时时间设置系统I/O的超时时间,并在I/O返回时激活就绪的Timer事件。堆的数据结构使得插入、删除和获取最小超时值的操作高效。libevent的小根堆在插入和删除操作上做了优化,降低了赋值操作的次数,提高了性能。
摘要由CSDN通过智能技术生成

目录

 

1.集成策略

2.timer小根堆


1.集成策略

1)系统的 I/O 机制像 select()和 epoll_wait()都允许程序制定一个最大等待时间(也称为最大超时时间)timeout,即使没有 I/O 事件发生,它们也保证能在 timeout 时间内返回。那么根据所有 Timer 事件的最小超时时间来设置系统 I/O 的 timeout 时间;当系统 I/O返回时,再激活所有就绪的 Timer 事件。

2)数据结构:小根堆

3)参考源码:timeout_next()函数根据堆中具有最小超时值的事件和当前时间来计算等待时间

static int timeout_next(struct event_base *base, struct timeval **tv_p) 
{ 
   struct timeval now; 
   struct event *ev; 
   struct timeval *tv = *tv_p; 
 
   // 堆的首元素具有最小的超时值 
   if ((ev = min_heap_top(&base->timeheap)) == NULL) { 
 
   // 如果没有定时事件,将等待时间设置为NULL,表示一直阻塞直到有I/O事件发生 
         *tv_p = NULL; 
    return (0); 
} 
 
   // 取得当前时间 
   gettime(base, &now); 
   // 如果超时时间<=当前值,不能等待,需要立即返回 
   if (evutil_timercmp(&ev->ev_timeout, &now, <=))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值