ゴルーチンの実行維持における time.sleep の重要性
Go プログラミングの領域では、ゴルーチンは同時実行のための強力なメカニズムを提供します。ただし、time.sleep が除外されている場合に特定のゴルーチンが意図したとおりに実行されない場合、疑問が生じます。
コードと観察
Go チュートリアルの次のコード スニペットを検討してください。 :
package main import ( "fmt" "time" ) func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") }
time.sleep を使用して実行すると、このコードは期待どおりの出力を生成します。 「こんにちは」が同じ意味で 5 回画面に書き込まれます。ただし、time.sleep をコメントアウトすると、予期しない結果が発生します。「hello」だけが 5 回出力されます。
time.sleep の役割
の重要な役割time.sleep は、ゴルーチンに実行の機会を提供することにあります。スリープがないと、ゴルーチン スケジューラは休止状態のままになり、say("world") ゴルーチンが制御を取得できなくなります。
ゴルーチン スケジューリングの非プリエンプティブな性質
ほとんどの場合とは異なりますマルチタスク オペレーティング システムでは、Go の goroutine スケジューラは非プリエンプティブです。これは、明示的に要求しない限り、ゴルーチンは中断されず、制御を譲歩しないことを意味します。
制御を譲る必要性
time.sleep がない場合、プライマリgoroutine は制御を独占し、制御を手放すことなく 5 回実行されます。完了すると、プログラムを維持するためのアクティブな goroutine がないため、プログラムは終了します。
結論
time.sleep を含めることで、2 番目の goroutine が枯渇しないことが保証されます。実行の機会。これにより、スケジューラはゴルーチン間で制御を切り替えることができ、意図した同時動作が実現します。したがって、goroutine の実行を維持する際の time.sleep の役割を理解することは、Go の同時実行機能の可能性を最大限に活用するために重要です。
以上がGo での goroutine の同時実行に「time.Sleep」が重要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。