定时器管理:nginx的红黑树和libevent的堆

Posted Just Love U

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定时器管理:nginx的红黑树和libevent的堆相关的知识,希望对你有一定的参考价值。

libevent 发生超时后,

while循环一次从堆顶del timer——直到最新调整的最小堆顶不是超时事件为止,(实际是del event),但是会稍后把这个timeout的 event放到active 任务list里,

等待处理,event标记为timeout,等处理actvie队列时再由应用层callback函数决定怎么处理标记为timeout的事件。

 

nginx处理超时时,直接删除红黑树中( event结构体里的 )rb node成员,同时调用应用层早已通过add timer注册好的超时handler函数。之所以没有用堆,

因为每次直接从内部删除节点,而不是堆顶部。

 

关键点,采用堆,删除时间是O(1),但是要调整堆,logn。插入时间基本是lgn。

采用红黑树,删除节点是3次旋转,但是,找到最小节点要logn。插入时间基本是lgn。

 

总体看,都差不多。http://blog.sina.com.cn/s/blog_56e6a0750101b0fo.html

以上是关于定时器管理:nginx的红黑树和libevent的堆的主要内容,如果未能解决你的问题,请参考以下文章

2018.2.15 algo 红黑树和Median Maintenance

C++ map的简单实现

红黑树插入算法实现原理分析

算法红黑树-二叉树-算法

深度解析红黑树

linux内核中,红黑树的4种应用场景,每一种都很实用