ゴルーチンの実行を理解する: ゴルーチンがアイドル状態のままになった理由
Go コードで、ゴルーチンとチャネルを実験しようとしました。目標は、チャネルから継続的に読み取る goroutine を作成することでしたが、予想される「Goroutine に入ります...」というメッセージは表示されませんでした。この記事では、この動作の背後にある理由を検討します。
指定したコードには、次のように作成されたゴルーチンが含まれています。
go func(m *chan string) { fmt.Println("Entering the goroutine...") for { fmt.Println(<- *m) } }(&messages)
ゴルーチンは起動されますが、メイン プログラムがすぐに終了するため、すぐに終了します。 「完了!」を印刷した後。ゴルーチンはメイン プログラムと同時に実行されます。ただし、メイン プログラムが終了すると終了します。
ゴルーチンが途中で終了しないようにするには、ゴルーチンの実行中にメイン プログラムを実行し続ける方法を見つける必要があります。これは、特定の数のメッセージを待機する別のチャネルを採用するか、sync.WaitGroup を使用するか、その他の手法を実装することによって実現できます。
Go ブログでは、同時実行に関する広範なガイドが提供されています (https://blog .golang.org/go-proverbs) は、Go での同時実行性がどのように機能するかについての貴重な洞察を提供します。
以上がメインプログラムが終了してもゴルーチンがアイドル状態のままになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。