Eon*_*nil 7 lua garbage-collection real-time
据我所知,跟踪GC无法避免在完成GC期间阻塞线程.
我使用过XNA + C#,GC时间无法删除.所以我切换到了较低级别的语言C,但我意识到我需要脚本语言.我在考虑Lua,但我担心Lua的GC机制.Lua正在使用增量跟踪GC,并且线程阻塞也应该如此.
那我该如何在实时游戏中处理这个呢?
def*_*ode 10
Lua的力量在于它不受你的影响.想上课吗?这可以用metatables构建.想要沙箱吗?使用lua_setfenv.
至于垃圾收集器.首先使用它.如果以后发现性能问题,请使用lua_gc来微调其行为.
一些例子:
在减速会出现问题的那些时候禁用垃圾收集器.
保持垃圾收集器禁用,只有当游戏逻辑说你的FPS计数有一些空间时才会执行它.您可以预先调整步长,或在运行时发现最佳步长.
禁用收集器并在停止点执行完整收集,即加载屏幕或剪切场景或在热门座位游戏中轮流更改.
您可能还会考虑使用其他脚本语言. 松鼠非常努力成为第二代Lua.它试图保留Lua的所有优点,同时放弃任何设计错误.两者之间的一个重大区别是松鼠使用引用计数而不是垃圾收集.事实证明,引用计数可能比垃圾收集慢一点,但它是非常确定的(AKA实时).