goroutine とは
並列処理をするための機構。
go func()
で新しい goroutine として実行を開始する。
以下、goroutine の説明を引用。
- go ステートメントは func() の終了を待たずに戻る。
- 関数終了時にゴルーチンも一緒に終了する。
- 関数に戻り値があっても、それらは関数の完了時に破棄される。
func() に指定するものは関数でもクロージャでもよい(というか、関数もクロージャのひとつ)。 このとき関数内から参照されている変数は関数が実行している間、生存しつづける。
ゴルーチンが持つモデルは単純で、その役割は同一アドレス空間内で他のゴルーチン同士を並列実行することです。 またゴルーチンは軽量で、スタック空間を割り当てるより若干コストがかかる程度です。 開始時のスタックサイズは節約のため小さく取り、必要に応じてヒープ領域を割り当て(自由に)拡張します。
ゴルーチンはOSの複数スレッド上へ多重化されるので、ひとつが例えばI/O待ちなどでブロックされていても、 他のゴルーチンの実行は継続します。 ゴルーチンの仕組みによってスレッドを作成・管理する複雑さの大部分が軽減されます。
ゴルーチンは内部的に、オペレーティングシステム内の複数のスレッド間に多重化されたコルーチンのように動作しますが、 プログラムを組む上で、これらの詳細について気に掛ける必要はありません。
ゴルーチン(の目指すところ)は、低コストです。
0 件のコメント:
コメントを投稿