2012/09/20

Go言語の並列処理 (goroutine)

goroutine とは

並列処理をするための機構。

go func()

で新しい goroutine として実行を開始する。

以下、goroutine の説明を引用。

  • go ステートメントは func() の終了を待たずに戻る。
  • 関数終了時にゴルーチンも一緒に終了する。
  • 関数に戻り値があっても、それらは関数の完了時に破棄される。

Goプログラミング言語仕様:goステートメント


func() に指定するものは関数でもクロージャでもよい(というか、関数もクロージャのひとつ)。 このとき関数内から参照されている変数は関数が実行している間、生存しつづける。

実践Go言語:ゴルーチン


ゴルーチンが持つモデルは単純で、その役割は同一アドレス空間内で他のゴルーチン同士を並列実行することです。 またゴルーチンは軽量で、スタック空間を割り当てるより若干コストがかかる程度です。 開始時のスタックサイズは節約のため小さく取り、必要に応じてヒープ領域を割り当て(自由に)拡張します。

ゴルーチンはOSの複数スレッド上へ多重化されるので、ひとつが例えばI/O待ちなどでブロックされていても、 他のゴルーチンの実行は継続します。 ゴルーチンの仕組みによってスレッドを作成・管理する複雑さの大部分が軽減されます。

実践Go言語:ゴルーチン


ゴルーチンは内部的に、オペレーティングシステム内の複数のスレッド間に多重化されたコルーチンのように動作しますが、 プログラムを組む上で、これらの詳細について気に掛ける必要はありません。

ゴルーチン(の目指すところ)は、低コストです。

C++プログラマ向けGo講座:ゴルーチン

0 件のコメント:

コメントを投稿