一种高效的定时器

梦想游戏人
目录:
algorithm, 游戏开发

常规的方法最小堆来处理定时器问题。这个算法有一个问题就是综合时间复杂度较大,每次命中tick后移除时间复杂度是对数级,堆顶元素时间判定倒是常数级。

在游戏GamePlay开发领域一般每次定时触发最小间隔是一帧,因此这一帧内所有定时器都可以被触发。定时器最大的操作就是插入和执行,删除操作倒是很少。

假设游戏循环100MS一次tick,每次tick有10个定时器被触发 ,那么100毫秒内的定时器都可以进行批量触发,就不用最小堆查询10次,依次删除10次了。这样从机制上就提供了更高效的可能。

在这个批量处理思路中,一个核心问题就是如何进行更高效的批量删除该范围的元素,如果是vector来存储的话,那效率就太糟糕了。

在这里可以借助哈希桶的思想来进行处理。

在数据存储结构上可以做的文章就比较多了:可以是skiplist思想去做动态适应和查询离散的时间,也可以是数组和链表的组合的粗放内存。

Scroll Up