ゴルーチン

ゴルーチンは、Go で並行プログラミングを実現する機能だ。Elixir のプロセスと同じようなものだと理解した。
ゴルーチンを使うには次のように関数呼び出しの前に go をつけるだけだ。これでその関数は新しいゴルーチンの中で実行され、プログラムはゴルーチンの終了を待つことなく次の処理に移る。つまりゴルーチンの処理とメインの処理が平行に動作するってわけだ。
例を見てみよう。まずは普通の(ゴルーチンを使わない)プログラム。

2度呼び出されている test 関数は、それぞれ “foo” と “bar” を5回ずつ出力する。これは当然書いてある順に処理される。

^o^ > go run go_name.go
1 foo
2 foo
3 foo
4 foo
5 foo
1 bar
2 bar
3 bar
4 bar
5 bar

じゃあ、次はゴルーチンを使ってみよう。ひとつめの関数呼び出しをゴルーチンに渡してみる。こんなプログラムになる。

実行してみる。

^o^ > go run go_name2.go
1 bar
1 foo
2 bar
2 foo
3 bar
3 foo
4 bar
4 foo
5 bar
5 foo

“foo” と “bar” が交互に出力され、二つの関数呼び出しが平行に動作している様子がわかる。

ちなみに、メインのプログラムが終了するとゴルーチンも終了するので、2つの関数呼び出しを両方ともゴルーチンにしてしまうと、何も出力されなくなる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください