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