現在取り組んでいるC ++エンジンは、いくつかの大きなスレッドに分割されています。生成(手順コンテンツの作成用)、ゲームプレイ(AI、スクリプト、シミュレーション用)、物理学、レンダリングです。
スレッドは、スレッドからスレッドに渡される小さなメッセージオブジェクトを介して相互に通信します。ステップ実行前に、スレッドはすべての受信メッセージを処理します-変換の更新、オブジェクトの追加と削除など。時々、あるスレッド(世代)が何か(アート)を作成し、それを別のスレッド(レンダリング)に渡して永久所有権を取得します。
プロセスの初期段階で、いくつかのことに気付きました。
メッセージングシステムは面倒です。新しいメッセージタイプの作成とは、ベースMessageクラスのサブクラス化、そのタイプの新しい列挙の作成、およびスレッドが新しいタイプのメッセージを解釈する方法のロジックを記述することを意味します。それは開発のためのスピードバンプであり、タイプミスのエラーを起こしやすいです。(Sidenote-これに取り組んでいると、動的言語がどれほど優れているかを理解できます!)
これを行うためのより良い方法はありますか?boost :: bindのようなものを使用してこれを自動化する必要がありますか?そうすると、発言したり、タイプなどに基づいてメッセージを並べ替えたりすることができなくなります。そのような管理が必要になるかどうかはわかりません。
これらのスレッドは非常に多くの通信を行うため、最初のポイントは重要です。メッセージを作成して渡すことは、物事を実現するための大きな部分です。私はそのシステムを合理化したいが、同じように役立つかもしれない他のパラダイムにも開かれたい。これを簡単にするために考えるべき異なるマルチスレッド設計はありますか?
たとえば、まれにしか書き込まれないが、複数のスレッドから頻繁に読み取られるリソースがあります。すべてのスレッドがアクセスできる、ミューテックスによって保護された共有データを持つというアイデアに開かれるべきですか?
ゼロからマルチスレッドを念頭に置いて何かを設計するのは初めてです。この初期段階では、私は実際にそれが本当にうまくいくと考えています(考慮)が、スケーリングと、新しいものを実装する際の私自身の効率が心配です。