ゴルーチンが有益であるために必要な最小作業サイズをおおよそ知っている人はいますか (作業をオフロードするための空きコアがあると仮定して)?
4 に答える
goroutine は、アプリケーションをより適切にモデル化するのに役立つ場合に使用する抽象化です。並行性指向のプログラミングを行っているので、並行性を持つアプリケーションの部分について考えてください。
OO システムについて考え、オブジェクトをインスタンス化する必要があるかどうかについて同じ質問をすることを想像してください。
最初に意味のあることをしてください。
私は Go を使ってプロジェクト euler を進めてきました。明確な答えはありませんが、Go docs のゴルーチンベースの素数ふるいは、各数値の素数を単純にチェックするよりも桁違いに遅いことがわかりました。GOMAXPROCS をより高い値に設定しても効果はありませんでした。
ゴルーチンの使用は、ハードウェアの効率だけではありません。時々、それらはソフトウェアを書きやすくし、バグを防ぐのをより簡単にします。この言語により、プログラマーは並行性を自然かつ単純に表現できます。それは私にとって大きな価値があります。
並行性の自然な候補である問題に関する私自身の経験では、簡単な「分散/収集」アプローチを使用して、CPUバウンドの問題で利用可能なすべてのコアを簡単に最大化できます。あなたのマイレージは異なる場合があります。
布袋
ゴルーチンは軽量で、多くのリソースを消費しません。問題に適切な場合はいつでも、それらを使用する必要があります。現在、go は複数のコアを使用するのに非常に優れているようには見えません (追加のホスト スレッドを割り当てる際のオーバーヘッドが少し大きすぎるようです)。
本当の問題は、ゴルーチンをいつ使用するかではなく、マルチコアをいつ使用するかだと思います。それに対する答えは、おそらく他の言語や追加のホスト プロセスと同じです。(残念ながら、ゴルーチンが新しいホスト プロセスをいつ占有するか、またはどのプロセスを占有するかを簡単に指定することはできません。)