時間。 Sleep と Goroutine の実行
提供されたコードでは、 time.Sleep 関数は goroutine の同時実行を可能にする上で重要な役割を果たします。 time.Sleep がコメントアウトされると、「world」ゴルーチンは実行する機会が得られません。
この動作の理由は、Go の goroutine スケジューラの非プリエンプティブな性質にあります。プリエンプティブ スケジューラとは異なり、Go スケジューラは、現在実行中のゴルーチンが自発的に制御を放棄しない限り、強制的に制御を譲りません。 time.Sleep がない場合、メインのゴルーチンは制御を独占し、戻る前に Say("hello") ループを 5 回完了します。メインのゴルーチンがプログラムの実行を担当するため、プログラムは直後に終了し、「ワールド」ゴルーチンを実行する時間がなくなります。
時間とともに、所定の位置でスリープすると、「ワールド」ゴルーチンは実行中に実行できます。メインのゴルーチンが待機しています。メインのゴルーチンが time.Sleep を実行する制御を譲ると、スケジューラは「ワールド」ゴルーチンに切り替えることができ、メインのゴルーチンが再開する前に最初の反復を実行できるようになります。このゴルーチン間の制御の切り替えにより、両方のタスクが確実に完了し、「world」と「hello」が交互に画面に出力される期待される出力が得られます。
以上がGo で「time.Sleep」によって goroutine の同時実行が有効になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。