本文を読み飛ばす

Go言語。channelを閉じることで任意の数のgoroutineに終了を指示できる

Go 言語で子スレッド、もとい子 goroutine を立ち上げてタスクを処理させる状況で、かつ起動するワーカーの数が事前に決定されていない(処理要求の到着に応じて起動するような)場合。channel を使って安全に子スレッドに終了を指示する方法を調べたので備忘録。

子を起動する親側は channel を作っておき、起動する子 goroutine にそれを渡し、子はそれを時間のかかる処理と並行して受信 (select) するように作っておく。そして、親側は終了すべきタイミングでそれを閉じる (close(ch))。すると子はそのチャンネルの方でブロック解除されるので、終了処理に入ることができる。思っていたよりも、簡単だった印象。

ただ、現実的なサーバー・クライアントシステムを作ろうとすると結構細かい部分でどうすれば良いのか分からない部分が多い。もう少し勉強が必要だな。