オブジェクト指向以外の意味でプログラムを設計する方法を常に見たいと思っていたので、私は現在楽しみのために Haskell を学んでいます。
しかし、Haskell をゲーム エンジンに使用することが有用かどうかについても研究しています。私の主な関心事はGCです。
GHC がコンカレントでスレッド ローカルであることは知っています。
GC は通常 1 ミリ秒から 5 ミリ秒の間一時停止することを読みました。プログラムごとに異なることはわかっていますが、計算するにはいくつかの数値が必要です。
私のゲームがそれで実行されているとしましょう。60fps
つまり、すべてのフレーム0.016666667s
で計算が必要ですよね? GC の一時停止により、これが増加し~0.017666667
、56fps
. ~4fps
したがって、またはのパフォーマンスが低下し7%
ます。私にとっては、かなりの大ヒットです。
ゲーム エンジンを高度に並行処理したいので、今はスレッド ローカル GC を頼りにしています。
すべてのエンティティが独自のメモリを持つように、ゲーム コードに Actor モデルを使用したいと考えています。私が正しければ、これはすべてのエンティティが独自のローカル ガベージ コレクションを持っていることを意味します。
しかし、主な問題は依然としてメインループを備えたゲームエンジンです。7% のランダムな fps 低下はかなり大きいです。
私の計算は正しいですか?あなたが私に与えることができる推奨事項はありますか?