2016-08-03 ruki
tbox内部提供了两种定时器实现:timer和ltimer timer: 高精度版本,采用最小堆实现,复杂度是:O(log(n)) ltimer: 低精度版本,采用linux内核中的timing-wheel算法,复杂度是:O(1) 这里主要讲解下,如何使用timer实现高精度的定时器任务,精确到ms级别,对于低精度的ltimer,可以参考:低精度定时器的使用 下面先给个简单的例子来说明: ```c /* 定义一个定时器任务处理函数 * * @param killed 表示当前任务是否被tb_timer_task_kill强行kill掉的 * @param priv 投递任务时传入的用户自定义数据指针 */ stat 继续阅读 »
2015-02-08 walter lee
【什么是堆】 概念:堆是一种特殊的二叉树,具备以下两种性质 1)每个节点的值都大于(或者都小于,称为最小堆)其子节点的值 2)树是完全平衡的,并且最后一层的树叶都在最左边 这样就定义了一个最大堆。如下图用一个数组来表示堆: 继续阅读 »
2016-08-03 ruki
tbox提供了两种定时器: 一种是基于最小堆的高精度定时器,精确到ms级别,但是时间复杂度在O(logn) 还有一种就是基于timing-wheel时间轮算法的低精度定时器,时间复杂度仅为O(1),实常数级别的,相当的快。 这个定时器是参考了linux内核的timer算法实现,不过linux那个比较通用,实现复杂,tbox中为了考虑精简性和低资源,对其算法做了精简 使得其资源占用更小,效率更高,但是使用场景上会有些限制,可以根据自己的实际情况,来判断使用需要用这个定时器来优化性能,还是使用高精度版本。 ltimer低精度定时器,提供了几种精度模式: TB_LTIMER_TICK_100MS:100毫秒级别 TB_LTIM 继续阅读 »
2016-09-04 craneyuan
在了解堆排序之前,我们有必要清楚“什么是堆呢?”。 堆(英语:Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。 堆的逻辑定义: 堆的实现通过构造二叉堆(英语:binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。 任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。 堆总是一棵完全树。即 继续阅读 »