Lua的GC和实时游戏
2011-6-11 6:28:16
收藏:0
阅读:226
评论:3
据我所知,追踪型GC不能在完整GC期间避免线程阻塞。
我以前使用过XNA+C#,但无法消除GC时间。因此我转用了更低级别的语言C,但我意识到我需要脚本语言。我考虑使用Lua,但我担心Lua的GC机制。Lua使用分步追踪GC,也应该会有线程阻塞。
那么我应该如何在实时游戏中处理这个问题呢?
点赞
用户28817
Lua的强大之处在于它会让开发者事半功倍。想要类?可以通过元表来创建。想要沙箱?可以使用lua_setfenv。
至于垃圾回收机制,首先先使用默认设置。如果后来发现性能问题,可以使用lua_gc进行微调。
以下是一些示例:
在垃圾回收会导致慢速时期时禁用它。
禁用垃圾回收,并在游戏逻辑提示FPS有余地时才启动它。您可以预调整步长,或在运行时发现最佳步长。
禁用回收机,并在停止点执行完全收集,例如在加载屏幕或剪辑场景或热座游戏转换时。
您也可以考虑使用其他脚本语言。Squirrel努力要成为第二代Lua。它试图保留Lua的所有优点,同时舍弃任何设计错误。两者之间的一个重要区别是squirrel使用引用计数而不是垃圾回收。引用计数可能比垃圾回收慢一些,但它非常确定(也就是即时性)。
2010-11-08 21:52:41
用户2013747
你可以修补 Lua 的垃圾回收器,以便限制每个收集周期的时间。例如:http://www.altdevblogaday.com/2011/07/23/predictable-garbage-collection-with-lua/
我认为在收集非常大的表时仍然可能存在长的 GC 步骤时间,因此需要采用避免大型表的编程风格。
以下文章讨论了使用 Lua 进行实时机器人控制的两种策略(1.不生成垃圾;2.使用 O(1)分配器并调整运行 GC 收集的时间): https://www.osadl.org/?id=1117
2014-02-26 22:55:17
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
正确处理的方法是: