同時実行と並列処理の違い: 1. 同時実行とは、異なる時点で処理するためにタスクをプロセッサに割り当てることを意味し、並列処理とは、各タスクを各プロセッサに割り当てて独立して完了させることを意味します。 2. 同時実行とは、同じ時点で処理することを意味します。同時にタスクは実行されませんが、並行して、同じ時点で、タスクは同時に実行される必要があります。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
並行性の概念を理解する場合、常に並列性という別の概念が関係します。同時実行と並列処理の違いを理解しましょう。
同時実行性 : さまざまな時点で処理するためにプロセッサーにタスクを処理します。同じ時点で、タスクが同時に実行されることはありません。
並列処理: 各タスクを各プロセッサに割り当てて、独立して完了します。同じ時点で、タスクは同時に実行されている必要があります。
同時実行性は並列性ではありません。並列処理とは、異なるコードを異なる物理プロセッサ上で同時に実行することです。並列処理の鍵は、同時に多くのことを実行することであり、並行性とは、多くのことを同時に管理することを指します。これらのことは、他のことを行うために一時停止される前に、途中でのみ実行される場合があります。
多くの場合、並列処理よりも同時実行の方が優れています。これは、オペレーティング システムとハードウェアの合計リソースは通常非常に小さいためですが、システムが同時に多くのことを実行できるようにすることができるためです。 「より少ないリソースでより多くのことを行う」というこの哲学は、Go 言語の設計を導く哲学でもあります。
ゴルーチンを並列化したい場合は、複数の論理プロセッサを使用する必要があります。論理プロセッサが複数ある場合、スケジューラはゴルーチンを各論理プロセッサに均等に分配します。これにより、Goroutine が別のスレッドで実行されます。ただし、本当に並列処理を実現するには、ユーザーは複数の物理プロセッサを備えたマシンでプログラムを実行する必要があります。そうしないと、たとえ Go 言語が実行中に複数のスレッドを使用したとしても、ゴルーチンは同じ物理プロセッサ上で同時に実行され、並列効果は達成されません。
次の図は、1 つの論理プロセッサーで goroutine を同時に実行する場合と、2 つの論理プロセッサーで 2 つの goroutine を並行して実行する場合の違いを示しています。スケジューラには、Go 言語のリリースとともに更新および改善されるいくつかの賢いアルゴリズムが含まれているため、言語のランタイム中に論理プロセッサのデフォルト設定をやみくもに変更することはお勧めできません。論理プロセッサの数を変更することでパフォーマンスが向上すると本当に考えられる場合は、言語ランタイム パラメーターをわずかに調整することもできます。
図: 同時実行と並列処理の違い
Go 言語は、GOMAXPROCS の数がタスクの数と等しい場合に並列実行を実現できますが、通常の状況ではが同時に実行されます。
【関連する推奨事項: Go ビデオ チュートリアル 、プログラミング教育 】
以上がGo における同時実行と並列処理の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。