网络游戏中的定时器设计

网络游戏中的定时器设计

    最近在开发的网络游戏中尝试引入定时器的功能,比较几种常用的定时器算法之后,选择了Linux 的内核的定

时器算法:时间轮算法。
(Linux 的内核把定时器分为 5 组,每组的粒度分别表示为:1 jiffies,256 jiffies,256*64 jiffies,

256*64*64 jiffies,256*64*64*64 jiffies,每组中桶的数量分别为:256,64,64,64,64,这样,在

256+64+64+64+64 = 512 个桶中,表示的范围为 2^32

    时间轮算法简单的说就是把时间分成大小不同(也可以相同)的几个轮子,每个轮子又分成相等的格子,每个

格子表示一个时间单位,使用时根据时间的长短把定时器挂在不同的格子后面,同一个格子的定时器组成一个

链表,当时间指针运转到某个格子时,就把格子后面定时器链表一个一个取出来,执行其回调函数。

  

     当时间指针转了一轮之后,回到原点,这时把下一级轮子的第一个格子里的定时器取出来,插入到时间指针所指的轮子里面。这样时间指针又可以开始运行了。时间指针永远指向第一个轮子。

核心算法:

初始化后:

 

TV1执行到最后一个链表后:
网络游戏中的定时器设计_第1张图片

你可能感兴趣的:(算法,linux,网络游戏)