GC在Haskell中暂停以进行软实时应用

时间:2013-08-14 14:14:32

标签: haskell garbage-collection ghc

我目前正在学习Haskell,因为我一直想看看你如何以非面向对象的方式设计程序。

但我也正在研究将Haskell用于游戏引擎是否有用。我主要担心的是GC。

我知道GHC是并发的和线程本地的。

我读到GC通常会在1ms-5ms之间暂停。我知道每个程序都有所不同,但我仍然需要一些数字来进行一些计算。

假设我的游戏在60fps运行,这意味着每个帧都需要0.016666667s的计算权利吗? gc暂停会将此值增加到~0.017666667,从而产生56fps。因此,~4fps7%会导致性能下降。对我来说这是一个非常大的打击。

现在我指望线程本地GC,因为我希望我的游戏引擎高度并发。

我想将Actor模型用于游戏代码,以便每个实体都拥有自己的内存。如果我是对的,这意味着每个实体都拥有自己的本地垃圾收集。

但主要问题仍然是带有主循环的游戏引擎。随机fps下降7%是相当大的。

我的计算是否正确?您可以给我的任何建议吗?

1 个答案:

答案 0 :(得分:2)

您的计算存在偏差。

你是对的:60 fps =每0.0166667秒1帧。

让我们假设(最坏的情况)GC暂停程序5ms。 GC运行的每次都会损失0.005。这意味着每次调用GC时,都会损失0.333 fps。

为了获得正确的计算,我们需要能够知道GC的调用频率,我不知道,并且肯定与您的程序生成的数据量有关。