解码mmo游戏服务器一:时间轮的引入

问题引入:在mmorpg游戏中,群战的时候,玩家释放技能,这时候会出现技能冷却时间,每一个技能都是一个定时器,或者在slg游戏中,玩家修建房屋,创建基地,都会产生一个延时操作,等到了指定时间后,完成房屋修建等任务!!!!!

轮询的尴尬:使用一个定时器,定时遍历多个链表,判定链表里面的任务是否到期! 效率低下,每一次遍历都需要筛选定时器,时间复杂度O(n).

多定时器的尴尬:同时创建多个定时器,每个定时器绑定到期任务,多定时器,会加大cpu的负荷,且任务的到期时间不同,必定会产生更多的定时器。

解决方案:时间轮的引入

如果所示:将同一时间的任务放在一起,组成一个链表,图中每个格子分别指向这样一个链表,定时器每到期一次,图中的指针移动一格,如此循环往复,当指针指向某个格子,代表这个链表里面的定时器可能到期(注意,这里是可能,因为时间轮是一个循环的圈,比如运行一圈需要时间50s,那么一个100s的定时器,虽然在槽位1的链表中,但是需要时间轮运行两圈,这个定时器才到期)。

golang 实现的时间轮git地址:https:/

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值