プログラミング言語 golang go concurrent 同時実行と並列処理の違い

同時実行と並列処理の違い

 
 
並行性の概念を説明するときは、必ず別の並列性の概念が関係します。ここで、同時実行と並列処理の違いを理解しましょう。

 

  • 同時実行性: 処理のためにさまざまな時点でタスクをプロセッサに渡します。同時に、タスクは同時に実行されません。
  • 並列処理: 各タスクを各プロセッサに割り当てて、独立して完了します。同じ時点で、タスクは同時に実行されている必要があります。

同時実行は並列処理ではありません。並列処理とは、異なるコードを異なる物理プロセッサ上で同時に実行することです。並列処理の鍵は、多くのことを同時に実行することであり、同時実行とは、多くのことを同時に管理することを指します。これらのことは、半分だけ完了した後で他のことを行うために中断される場合があります。

多くの場合、同時実行の効果は並列処理よりも優れています。これは、オペレーティング システムとハードウェアの合計リソースは一般に小さいためですが、同時実行によりシステムが多くのことを同時に実行できるようになります。この「少ないリソースでより多くのことを行う」という哲学は、Go 言語の設計を導く哲学でもあります。

goroutine を並列化したい場合は、複数の論理プロセッサを使用する必要があります。複数の論理プロセッサがある場合、スケジューラはゴルーチンを各論理プロセッサに均等に分配します。これにより、Goroutine が別のスレッドで実行されます。ただし、実際に並列効果を実現するには、ユーザーは複数の物理プロセッサを備えたマシンでプログラムを実行する必要があります。そうしないと、Go 言語の実行中に複数のスレッドが使用された場合でも、ゴルーチンは同じ物理プロセッサ上で同時に実行され、並列処理の効果が得られません。

以下の図は、1 つの論理プロセッサーでゴルーチンを同時に実行する場合と、2 つの論理プロセッサーで 2 つのゴルーチンを同時に実行する場合の違いを示しています。スケジューラには、Go 言語のリリースに合わせて更新および改善される賢いアルゴリズムが含まれているため、論理プロセッサの言語ランタイムのデフォルト設定をやみくもに変更することはお勧めできません。論理プロセッサの数を変更することでパフォーマンスが向上すると本当に考えられる場合は、言語ランタイムのパラメーターを微調整することもできます。

 

Go言語はGOMAXPROCSの数とタスクの数が同じであれば並列実行可能ですが、一般的には並行して実行されます。

 

「同時実行と並列処理の違い」についてわかりやすく解説!絶対に観るべきベスト2動画

第150回お試しアカウント付き並列プログラミング講習会「並列有限要素法で学ぶ並列プログラミング徹底入門」(MPIの基礎から三次元並列有限要素法まで)【一次元有限要素法(1/2)】
第150回お試しアカウント付き並列プログラミング講習会「並列有限要素法で学ぶ並列プログラミング徹底入門」(MPIの基礎から三次元並列有限要素法まで)【並列有限要素法への道】