ホームページ >バックエンド開発 >Golang >親ゴルーチンが終了すると、未完了のゴルーチンはどうなりますか?

親ゴルーチンが終了すると、未完了のゴルーチンはどうなりますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-12 11:16:10209ブラウズ

What Happens to Unfinished Goroutines When Their Parent Goroutine Exits?

親が終了した場合の未完了のゴルーチンの運命

Go プログラムでメインまたは親のゴルーチンが終了すると、未完了のゴルーチンは突然終了します。ランタイム システム全体がシャットダウンし、実行を継続したり、待機したり、キャンセルしたりする余地がなくなります。この現象は、フラッシュ ペーパーが発火して瞬時に消えることにたとえることができます。

Go プログラミング本に掲載されているコード スニペットでは、mirroredQuery が返されると、メインの goroutine が終了すると、2 つの遅い goroutine が存在しなくなります。現在の状態に関係なく、即座に。これは goroutine のリークと考えられますが、プロセス全体が終了するため、割り当てられたリソースは自動的にクリーンアップされます。

ただし、mirroredQuery が戻った後もメインの goroutine がまだ実行されている場合、未完了の goroutine は終了するまで実行され続けます。彼ら:

  • タスクを使い果たし、自分で戻ります
  • 実行します終了させるアクション (例: runtime.Goexit を呼び出す、またはパニックをトリガーする)

この場合、ユーザーは応答をチャネルに送信してから戻ります。すべてのゴルーチンが返されると、チャネルはマイナーなリソース リークとして応答を保持します。ただし、チャネルへの参照が残っていないため、最終的にはチャネルに含まれる文字列とともにガベージ コレクションが行われます。

この状況でバッファリングされたチャネルを使用すると、ゴルーチンがブロックされず、ゴルーチンがブロックされるまで実行を継続できます。自分のタスクを完了することができます。バッファリングされていないチャネルの場合、負けたゴルーチンがブロックされ、チャネルとそのリソースが無期限に割り当てられたままになります。

以上が親ゴルーチンが終了すると、未完了のゴルーチンはどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。