5

我目前学习 Haskell 是为了好玩,因为我一直想看看你如何在非面向对象的意义上设计程序。

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

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

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

假设我的游戏运行在60fps这意味着每一帧都需要0.016666667s计算,对吗?一个 gc 暂停会增加这~0.017666667导致56fps. 所以它是~4fpsor的性能损失7%。对我来说,这是一个相当大的打击。

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

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

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

我的计算正确吗?有什么建议可以给我吗?

4

1 回答 1

2

你的计算有偏差。

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

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

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

于 2013-08-14T14:40:14.310 回答