用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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tomcat启动时乱码(tomcat打开是乱码)

    一、乱码图示二、解决方案1.进入安装路径下的conf文件夹>>找到logging.properties使用记事本打开2.找出图中的代码,将其修改为java.util.logging.ConsoleHandler.encoding=GBK三、验证是否解决问题进入命令行窗口,输入startup.bat运行乱码问题解决…

    2022年4月17日
    40
  • c# TextBox

    c# TextBox1.text内容全选事件textBox1.selectAll();2.失去与获取焦点事件小诀窍:在输入+= 后,按两次Tab键,就会出现后面的

    2022年7月3日
    31
  • 笔记本(无线网卡)配置虚拟机上网

    笔记本(无线网卡)配置虚拟机上网当我们安装了virtualbox或者VMware虚拟机,都会虚出一个虚拟网卡。如果我们使用的是网线上网,那么可以选择“网桥”的方式让虚拟机上网,这样可以保证虚拟机和主机之间互通,而且虚拟机也可以访问外网。这时,虚拟机可以使用dhcp也可以手工的方式指定ip。那么,如果笔记本使用的是无线网卡上网,那么就无法使用“网桥”的方式配置虚拟机上网了。这时,可以使用host-only的配置方式,同

    2022年5月19日
    44
  • H5面试题—new操作符具体干了什么呢[通俗易懂]

    H5面试题—new操作符具体干了什么呢

    2022年3月8日
    330
  • 最快的方法来清除Chrome浏览器DNS高速缓存

    最快的方法来清除Chrome浏览器DNS高速缓存

    2022年1月12日
    77
  • aptitude命令使用

    aptitude命令使用aptitude一个类似于aptinstall的命令使用引用官网的描述解释aptitude是一个功能丰富的包管理器,包括:使用类似mutt的语法灵活地检索软件包,类似dselect的持续用户操作,获取并显示大多数软件包的Debianchangelog的功能,一个类似apt-get的命令行模式。aptitude还是个Y2K兼容,轻便,自清洁以及友好的程序。常…

    2025年7月28日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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