据我所知,跟踪GC在完成GC时无法避免线程阻塞。
我用过XNA+C#,GC时间是不可能去掉的。所以我改用低级语言C,但我意识到我需要脚本语言。我在考虑Lua,但我担心Lua的GC机制。Lua正在使用增量跟踪GC,线程阻塞也应该如此。
那么我应该如何在实时游戏中处理这个问题呢?
发布于 2010-11-08 21:52:41
Lua的强大之处在于它不会妨碍您的工作。想要课程吗?可以使用metatables构建。想玩沙箱游戏吗?使用lua_setfenv。
至于垃圾收集器。首先按原样使用它。如果以后发现性能问题,请使用lua_gc对其行为进行微调。
下面是一些例子:
您还可以考虑另一种脚本语言。Squirrel非常努力地尝试成为第二代Lua。它试图保留Lua的所有好特性,同时抛弃它的任何设计错误。两者之间最大的区别之一是squirrel uses reference counting而不是垃圾收集。事实证明,引用计数可能比垃圾收集慢一点,但它是非常确定的(AKA实时)。
发布于 2010-11-02 22:36:18
正确的处理方法是:
发布于 2014-02-26 22:55:17
您可以修补Lua GC,以便对每个收集周期进行时间限制。例如: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
https://stackoverflow.com/questions/4064451
复制相似问题