Mai*_*ein 5 garbage-collection haskell ghc
我目前正在学习Haskell的乐趣,因为我一直想看看你如何以非面向对象的方式设计程序.
但我也在研究将Haskell用于游戏引擎是否有用.我主要担心的是GC.
我知道GHC是并发的和线程本地的.
我读到GC通常会在1ms-5ms之间暂停.我知道每个程序都有所不同,但我仍然需要一些数字来进行一些计算.
假设我的游戏运行60fps就意味着每一帧需要0.016666667s计算吗?gc暂停会增加这~0.017666667导致的结果56fps.所以它的性能损失~4fps或7%.对我来说这是一个非常大的打击.
现在我指望线程本地GC,因为我希望我的游戏引擎高度并发.
我想将Actor模型用于游戏代码,这样每个实体都会拥有自己的内存.如果我是对的,这意味着每个实体都拥有自己的本地垃圾收集.
但主要问题仍然是游戏引擎的主循环.随机fps下降7%是相当大的.
我的计算是否正确?你能给我的任何建议吗?
你的计算有偏差。
你是对的:60 fps = 每 0.0166667 秒 1 帧。
我们假设(最坏的情况)GC 将程序暂停 5 毫秒。每次 GC 运行,您都会损失 0.005。这意味着每次调用 GC 时,都会损失 0.333 fps。
为了获得正确的计算,我们需要能够知道 GC 被调用的频率,我不知道,但这肯定与程序生成的数据量有关。