ゴルーチンの協調スケジューリングと潜在的な実行不足
ゴルーチンは協調的にスケジュールされており、自発的に他のゴルーチンに実行を譲ります。このアプローチは一般に公平性を保証しますが、譲歩を控えるゴルーチンが他のゴルーチンを枯渇させる可能性があるかどうかという問題が生じます。
参照されたブログ投稿 (http://blog.nindalf.com/how-goroutines) によると、 -work/) を使用すると、降伏せずに継続的にループするゴルーチンは、実際に同じスレッド上の他のゴルーチンを枯渇させる可能性があります。特定のスレッド上のゴルーチンは多重化されています。つまり、ネットワーク入力、スリープ、チャネル操作などのブロック操作が発生した場合でも、スレッドをブロックしません。
例として、指定されたコード内の「sum」関数は繰り返し実行されます。ランダムな回数ループし、合計に数値を加算し、最終結果を出力します。 (例に示すように) このようなゴルーチンが「go」キーワードを使用して複数生成された場合、それらが 1 つずつ実行されるかどうかは、次の要因によって決まります:
したがって、明示的な降伏またはスケジューリングをトリガーする関数呼び出しがない場合、無限ループを実行するゴルーチンは、同じスレッド上の他のゴルーチンを潜在的に飢餓状態にする可能性があります。ただし、Go ランタイムは goroutine 実行のバランスを積極的に取り、飢餓を防止しようとすることに注意することが重要です。
以上がGo でゴルーチンを継続的に実行すると、他のゴルーチンが枯渇する可能性がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。