Moving_avg_concurrent2 のパフォーマンス
Moving_avg_concurrent2 は、複数のゴルーチンの作成と管理のオーバーヘッドが並列処理のメリットを上回るため、スケールしません。 Goroutine は軽量のスレッドですが、Goroutine の作成とスケジュールのコスト、Goroutine 間の通信のコストなど、それに関連するオーバーヘッドが多少あります。この場合、ゴルーチンを管理するオーバーヘッドが、計算を並列化するメリットよりも大きくなります。
Moving_avg_concurrent3 のパフォーマンス
Moving_avg_concurrent3 は、マスターを使用するため、moving_avg_serial4 よりも遅くなります。 /worker パラダイム。追加のオーバーヘッドが発生します。マスター/ワーカー パラダイムでは、マスター スレッドがワーカー スレッドのプールを作成し、作業をワーカーに分散します。次に、ワーカーは計算を実行し、結果をマスター スレッドに返します。これにより、マスター スレッドはワーカー スレッドを作成して管理する必要があり、ワーカーは作業を受け取って結果を返すためにマスター スレッドと通信する必要があるため、追加のオーバーヘッドが発生します。
結論
この場合、計算を並列化しても大幅なパフォーマンスの向上を達成することはできません。ゴルーチンの管理に伴うオーバーヘッドは、並列処理の利点を上回ります。アルゴリズムのシリアル実装 (moving_avg_serial4 など) を使用することをお勧めします。
以上が並列化によってこの移動平均計算のパフォーマンスが向上しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。