Go プログラムでメインまたは親のゴルーチンが終了すると、未完了のゴルーチンは突然終了します。ランタイム システム全体がシャットダウンし、実行を継続したり、待機したり、キャンセルしたりする余地がなくなります。この現象は、フラッシュ ペーパーが発火して瞬時に消えることにたとえることができます。
Go プログラミング本に掲載されているコード スニペットでは、mirroredQuery が返されると、メインの goroutine が終了すると、2 つの遅い goroutine が存在しなくなります。現在の状態に関係なく、即座に。これは goroutine のリークと考えられますが、プロセス全体が終了するため、割り当てられたリソースは自動的にクリーンアップされます。
ただし、mirroredQuery が戻った後もメインの goroutine がまだ実行されている場合、未完了の goroutine は終了するまで実行され続けます。彼ら:
この場合、ユーザーは応答をチャネルに送信してから戻ります。すべてのゴルーチンが返されると、チャネルはマイナーなリソース リークとして応答を保持します。ただし、チャネルへの参照が残っていないため、最終的にはチャネルに含まれる文字列とともにガベージ コレクションが行われます。
この状況でバッファリングされたチャネルを使用すると、ゴルーチンがブロックされず、ゴルーチンがブロックされるまで実行を継続できます。自分のタスクを完了することができます。バッファリングされていないチャネルの場合、負けたゴルーチンがブロックされ、チャネルとそのリソースが無期限に割り当てられたままになります。
以上が親ゴルーチンが終了すると、未完了のゴルーチンはどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。