我目前在学习Haskell,只是出于兴趣,因为我想看看如何以非面向对象的方式设计程序。
但我还在研究是否有用使用Haskell来开发游戏引擎。我的主要问题是GC(垃圾回收)。
我知道GHC是并发和线程本地的。
我读过GC通常会在1ms-5ms之间暂停。我知道这对每个程序都不同,但我仍需要一些数字来进行计算。
假设我的游戏以60fps
运行,这意味着每帧需要0.016666667s
的计算时间对吗?GC暂停会将这个时间增加到~0.017666667
,这将导致56fps
。所以这是~4fps
或7%
的性能损失。对我来说,这是一个相当大的打击。
现在我依靠线程本地GC,因为我希望我的游戏引擎高度并发。
我想为游戏代码使用Actor模型,因此每个实体都将拥有自己的内存。如果我没记错的话,这意味着每个实体都有自己的本地垃圾回收。
但主要问题仍然是游戏引擎及其主循环。7%的随机fps下降相当大。
我的计算正确吗?你能给我一些建议吗?