C# Job System の概要
ジョブシステムとは何か

マルチスレッドとは

シングルスレッド計算システムでは、1 度に 1 つの命令が入り、1 度に 1 つの結果が出ます。プログラムをロードして完了するまでの時間は、CPU に課された作業量によります。

マルチスレッドは、CPU が複数のコアにわたる多くのスレッドを同時に処理できる能力を利用したプログラミングの一種です。タスクや命令を 1 つずつ実行する代わりに、いっぺんに実行されます。

プログラムの開始時に 1 つのスレッドがデフォルトで実行されます。これが「メインスレッド」です。メインスレッドは新しいスレッドを作成してタスクを処理します。これらの新しいスレッドは互いに並行して実行され、通常、完了するとその結果をメインスレッドと同期します。

マルチスレッドに対するこのアプローチは、長期間実行されるタスクが 2–3 個ある場合にうまく機能します。しかし、ゲーム開発コードには通常、同時に実行するための小さな命令が多く含まれています。スレッドごとにスレッドを作成すると、生存期間が短い、多くのスレッドで一杯になります。これによって、CPU とオペレーティングシステムの処理能力の限界を超えてしまいます。

スレッドプール (英語) を持つことで、スレッドの生存期間の問題を緩和することが可能です。ただし、スレッドプールを使用する場合でも、同時に多数のスレッドがアクティブになる傾向があります。CPU コアより多くのスレッドを持つと CPU リソースに対しスレッドが互いに競合し、その結果、頻繁な コンテキストの切り替え が発生します。コンテキストの切り替えは、スレッドの状態を実行を通して部分的に保存し、別のスレッドで作業し、後に最初のスレッドを再構築して処理を継続するプロセスです。コンテキストの切り替えはリソースに高い負荷をかけます。そのため、可能な限り、コンテキストの切り替えを避ける必要があります。


  • 2018–06–15 編集レビュー を行ってパブリッシュされたページ

  • C# Job System は 2018.1 で公開NewIn20181

C# Job System の概要
ジョブシステムとは何か