2017-05-03 5 views
0

goroutineを使用していくつかの奇妙な動作が発生しています。間違ったことについて助言やコメントを提供してください。goroutineのパフォーマンスに影響を与える要因

私はgoroutinesを使って同時にシミュレーションを行っていますが、何らかの理由で私が入れたgoroutinesの数が増えて妥当な時間内にシミュレーションを終了できなくなってしまいました。開始すべての10Kゴルーチンに対して

  1. 、私はCPUやメモリ不足が表示されていない5秒

  2. によって計算時間が増加:ここで私は気づく事があります。しかし、CPU使用率は、10kのゴルーチンごとにわずかに増加します。私は200Kゴルーチンを入れたとえば、CPUの使用率が70%前後である私は、ディスク

  3. 私はゴルーチンを起動することなく、シミュレーションを実行し、遅さが内側かあるので、それは、非常に高速な終了を使用していないよ

  4. ゴルーチンのために

  5. 私はいくつかの作業負荷を並行して実行するために、各ゴルーチンの内側に追加のゴルーチンを1回使用しようとしました。 CPU使用率は100%に上昇しましたが、全体の速度は50%減少しました...

  6. ポインタを使用していくつかの大きな構造体をゴルーチンに渡しています。すべてのゴルーチンは同じデータを使用します。

誰かが私が最適化する必要があるかもしれない事を知っているか、私が実行できるテストを提案していますか?ありがとう!

+0

goルーチンが構造体のデータを変更していますか? – Acidic

+5

すべてのゴルーチンが連続的に実行されている(つまり、I/Oをブロックしていない)場合、システムが同時に実行できるスレッド数よりも多くのゴルーチンを持つことで、パフォーマンス上の利点は得られません。実際に、より多くのgoroutinesを持つことは、それらの間の切り替えに伴うオーバーヘッドのために物事を遅らせるでしょう。 –

答えて

0

「ワーカー」のゴルーチンをいくつか起動し、ビアチャネルに「ジョブ」を送信します。多くのCPUを消費する多くのメモリ割り当てを節約できます。

関連する問題