良好な同時実行性は、アプリケーションにいくつかのスレッドを投げて最高のものを期待する以上のことを必要とします。プログラムが並外れた並列処理から純粋な順次処理に移行する方法には幅があります。どのプログラムでも、アムダールの法則を使用して、問題またはアルゴリズムがどれだけスケーラブルであるかを表現できます。恥ずかしいほど並列アプリケーションのいくつかの資格は次のとおりです。
- 共有状態はありません。すべての関数は、渡されたパラメーターにのみ依存します
- 物理デバイス(グラフィックカード、ハードドライブなど)へのアクセスなし
他の資格もありますが、これらの2つだけで、特にゲームが複数のコアを利用するのが簡単だと思わない理由を理解できます。1つは、異なる関数が物理学、動きを計算し、人工知能を適用するなど、レンダリングされる世界のモデルを共有する必要があります。2つ目は、このゲームモデルの各フレームをグラフィックカードで画面にレンダリングする必要があります。
公平を期すために、多くのゲームメーカーは、サードパーティ製のゲームエンジンを使用しています。しばらく時間がかかりましたが、これらのサードパーティのゲームエンジンは、以前よりはるかに並列になりました。
効果的な同時実行性に対処するには、アーキテクチャ上の大きな課題があります
並行性は、バックグラウンドでのタスクの実行から並行性の完全なアーキテクチャサポートまで、多くの形式をとることができます。一部の言語では、ERLANGなどの非常に強力な同時実行機能が提供されますが、アプリケーションの構築方法については非常に異なる考え方が必要です。
すべてのプログラムが完全なマルチコアサポートの複雑さを実際に必要とするわけではありません。そのような例の1つは、税務ソフトウェア、または任意のフォーム駆動型アプリケーションです。あなたの時間のほとんどがユーザーが何かをするのを待つことに費やされるとき、マルチスレッドアプリケーションの複雑さはそれほど有用ではありません。
一部のアプリケーションは、Webアプリケーションなど、より厄介な並列ソリューションに適しています。この場合、プラットフォームは恥ずかしいほど並行して開始され、スレッドの競合を課す必要はありません。
要点:
複数のスレッド(つまりコア)を利用しないことで、すべてのアプリケーションが実際に損害を受けるわけではありません。それによって傷つけられるものについては、計算が並列処理に適していないか、それを調整するためのオーバーヘッドがアプリケーションをより脆弱にする場合があります。残念ながら、並列処理はまだうまくいくべきほど簡単ではありません。