文档章节

用Erlang实现Time Wheel

rongtou
 rongtou
发布于 2016/12/27 22:16
字数 505
阅读 89
收藏 0

游戏开发总会要用到timer,离不开定时器的使用。像界面需要定时去绘制更新界面,后端也需要来定时执行逻辑,驱动事件。条条道路通罗马,就看你使用技巧好不好了。

一般服务器都是10ms一个tick,地图进程就在每个tick时执行逻辑处理,例如检查buff是否到期了,怪物是否该去攻击或走路了。以前的项目总是遍历整个列表,检查每个buff是否到期。可想而知,当列表长度大了,这里会耗费不少计算,而这些却是不必要的。当然优化方案也是有的,其中之一就是实用time wheel时间轮了。具体原理我就不啰嗦了,可以参考引用资料

原理还是很简单,采用多层时间轮会好点。当然具体问题还是具体分析,当需要大量定时器时,时间轮还是不错的。如果像玩家进程,只是少量需要的,可以使用更简单的方案。保存timer有序列表,每次添加,删除完定时器,都保证列表有序,然后只需从列表中取出第一项出来,加入到系统的定时器等待,超时了又再取下一个。这样就不需要定时tick去检查了,同时也不会占用多余的cpu,节省了资源,而且实现也是很简单的。像我在项目实施的,插入,删除的复杂度都在O(n),但实际上N是很小的,所以可以不需考虑性能问题。最后就是附上我基于skynet上的timer实现,用erlang实现的timewheel了^_^

erlang time wheel

© 著作权归作者所有

rongtou

rongtou

粉丝 5
博文 9
码字总数 4533
作品 0
广州
程序员
私信 提问
【鲁班学院】设计模式—访问者(Visitor)模式

一、定义 访问者模式是一种从操作的对象结构中分离算法的方式。 它可以在不改变数据结构的前提下定义作用与这些元素的新操作。它遵循开闭原则。 > Represent an operation to be performed o...

骚年锦时
05/30
12
0
[Erlang 0035] Erlang SMP

Erlang SMP Erlang SMP (Symmetrical Multi Processor)在97-98年左右开始,项目按照先跑起来再优化的开发策略("First make it work, then measure, then optimize".),在2006年R11B发布了第一个......

唐玄奘
2017/12/03
0
0
Erlang R15B01 发布

Erlang R15B01 发布了,该版本添加 scheduler_wall_time 统计和 LDAP 客户端应用;ssh 实现改为使用 public_key 应用;退出时写回控制台缓冲;DTrace 支持。 Erlang是一个结构化,动态类型编...

红薯
2012/04/19
1K
1
SCTP 库的简述和代码 (4)

2 定时器 简单的时间轮. 使用时间轮是因为, 定时器数目可能比较大. 要求使用者周期性调用, ptimerwheel_hb 缺点是, 不精确. / Hash table for hold timer list / static listheader wheelslo...

jundai
2011/04/09
519
0
Erlang 18RC1释出

Erlang 18RC1释出 系统技术非业余研究2015-04-01197 阅读 原创文章,转载请注明: 转载自系统技术非业余研究 本文链接地址: Erlang 18RC1释出 三月底,官网宣布Erlang 18RC1公测,参看 这里,...

系统技术非业余研究
2015/04/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员大数据教程分享Scala系列之模式匹配和样例类

好程序员大数据教程分享Scala系列之模式匹配和样例类 1.样例类 在Scala中样例类是一中特殊的类,样例类是不可变的, 可以通过值进行比较,可用于模式匹配。 定义一个样例类: 构造器中每一个...

好程序员官网
15分钟前
3
0
让nginx上的静态网页在访问的时候没有html后缀

需求背景: 公司产品小姐姐觉得这个访问带html后缀不专业,要求访问不带html后缀 nginx 配置 #原配置 location / { index index.html index.htm index.php; try_files $...

Linux_Anna
15分钟前
3
0
beetl的内置函数

函数调用Beetl内置函数请参考附录,以下列出了常用的函数date 返回一个java.util.Date类型的变量,如 date() 返回一个当前时间(对应java的java.util.Date); ${date( "2011-1-1" , "yy...

gantaos
16分钟前
3
0
spring cloud 2.x版本 Gateway自定义过滤器教程

前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 [toc] 本文基于前两篇文章eureka-server、eureka-client、eureka-ribbon、eureka-feign和spring-gataway的实现。 参考......

毛毛向前冲V5
19分钟前
3
0
VPGAME 的 Kubernetes 迁移实践

作者 | 伍冲斌 VPGAME 运维开发工程师 导读:VPGAME 是集赛事运营、媒体资讯、大数据分析、玩家社群、游戏周边等为一体的综合电竞服务平台。总部位于中国杭州,在上海和美国西雅图分别设立了...

阿里巴巴云原生
25分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部