用Erlang实现Time Wheel

用Erlang实现Time Wheel

大家好,又见面了,我是全栈君。

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

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

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

erlang time wheel

转载于:https://my.oschina.net/rongtou/blog/813233

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108711.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 什么是反射机制?_java的反射是如何实现的

    什么是反射机制?_java的反射是如何实现的   Java反射学习步骤:1、 什么是反射机制?2、 获取字节码文件对象(class)3、 (Consrtuctor)用字节码对象(class)new一个对象4、 获取和设置字段(Field)对象的值5、获取指定class的函数(Method)并对其调用6、反射实例什么是反射机制?说全:Java反射机制是在运行状态中,对于任意一个类(Class文件),都能够知道这个类的属性和方法;  …

    2022年10月29日
  • PHP 数组截取 array_slice() 函数

    PHP 数组截取 array_slice() 函数定义和用法array_slice()函数在数组中根据条件取出一段值,并返回。注释:如果数组有字符串键,所返回的数组将保留键名。(参见例子4)语法array_slice(array,offset,length,preserve)参数array必需。规定输入的数组。offset必需。数值。规定取出元素的开始位置。如果是正数,则从前往后开始取,如果是负值,从

  • 完整html网页代码_css长度单位

    完整html网页代码_css长度单位长度单位转换JavaScript程序varcomputed=falsevardestination=”/”vardecimal=0functionconvert(entryform,from,to){convertfrom=from.selectedIndexconvertto=to.selectedIndexentryform.display.value=(…

  • python 3Des 加密

    python 3Des 加密

    2021年11月29日
  • Apache Struts2(S2-052)远程代码执行漏洞利用和修复建议

    Apache Struts2(S2-052)远程代码执行漏洞利用和修复建议点击“合天智汇”关注,学习网安干货话说哥们正吃着火锅唱着歌呢~~突然瞥见微信群的信息“Struts2S2-052RCE。。。。”赶紧放下筷子瞅一眼,这Struts2真是不让人省心啊,…

  • js清除浏览器缓存的几种方法(项目总结)「建议收藏」

    js清除浏览器缓存的几种方法(项目总结)「建议收藏」以前很少关注这方面的问题,直达我们的技术经理找我们说要换框架,为什么换框架呢,因为缓存的问题,原来的项目是用版本号作为刷新的依据的。因为微信公众号上有这样一个机制,使用版本好的话,有时做不到及时刷新,所以就用了vue.js,因为它有这样的功能就是如果某个文件里面的数据改变了,那么vue.js就会把这个文件的名字也相应的改掉,所以缓存里面的东西就用不了了,这样就做到了及时刷新,向后台请求数据。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号