Lua的GC和实时游戏
据我所知,追踪型GC不能在完整GC期间避免线程阻塞。
我以前使用过XNA+C#,但无法消除GC时间。因此我转用了更低级别的语言C,但我意识到我需要脚本语言。我考虑使用Lua,但我担心Lua的GC机制。Lua使用分步追踪GC,也应该会有线程阻塞。
那么我应该如何在实时游戏中处理这个问题呢?
原文链接 https://stackoverflow.com/questions/4064451
Lua的强大之处在于它会让开发者事半功倍。想要类?可以通过元表来创建。想要沙箱?可以使用lua_setfenv。
至于垃圾回收机制,首先先使用默认设置。如果后来发现性能问题,可以使用lua_gc进行微调。
以下是一些示例:
在垃圾回收会导致慢速时期时禁用它。
禁用垃圾回收,并在游戏逻辑提示FPS有余地时才启动它。您可以预调整步长,或在运行时发现最佳步长。
禁用回收机,并在停止点执行完全收集,例如在加载屏幕或剪辑场景或热座游戏转换时。
您也可以考虑使用其他脚本语言。Squirrel努力要成为第二代Lua。它试图保留Lua的所有优点,同时舍弃任何设计错误。两者之间的一个重要区别是squirrel使用引用计数而不是垃圾回收。引用计数可能比垃圾回收慢一些,但它非常确定(也就是即时性)。
你可以修补 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
- 如何在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中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
正确处理的方法是: