[英]Lua's GC and realtime game
據我所知,跟蹤GC無法避免在完成GC期間阻塞線程。
我使用過XNA + C#,GC時間無法刪除。 所以我切換到了較低級別的語言C,但我意識到我需要腳本語言。 我在考慮Lua,但我擔心Lua的GC機制。 Lua正在使用增量跟蹤GC,並且線程阻塞也應該如此。
那我該如何在實時游戲中處理這個呢?
Lua的力量在於它不受你的影響。 想上課嗎? 這可以用metatables構建。 想要沙箱嗎? 使用lua_setfenv 。
至於垃圾收集器。 首先使用它。 如果以后發現性能問題,請使用lua_gc來微調其行為。
一些例子:
在減速會出現問題的那些時候禁用垃圾收集器。
保持垃圾收集器禁用,只有當游戲邏輯說你的FPS計數有一些空間時才會執行它。 您可以預先調整步長,或在運行時發現最佳步長。
禁用收集器並在停止點執行完整收集,即加載屏幕或剪切場景或在熱門座位游戲中輪流更改。
您可能還會考慮使用其他腳本語言。 松鼠非常努力成為第二代Lua。 它試圖保留Lua的所有優點,同時放棄任何設計錯誤。 兩者之間的一個重大區別是松鼠使用引用計數而不是垃圾收集。 事實證明,引用計數可能比垃圾收集慢一點,但它是非常確定的(AKA實時)。
處理這個問題的正確方法是:
您可以修補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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.