【ごるーちん】

Goroutine とは?

公開:
💡 一人一人は身軽な小さな働き手を、大量に走らせられる並行処理のしくみ

Go言語の軽量な並行実行単位。OSスレッドより低コストで大量に生成できる。

📌 このページのポイント
Goroutineの仕組み G G G G G G 軽量で大量 Goランタイム(スケジューラ) OSスレッド1 OSスレッド2 少数のOSスレッド上に大量のGoroutineを効率よく割り当てる
多数のGoroutineが少数のOSスレッドに割り当てられるイメージ
ひよこ ひよこ
Goroutineって名前、初めて聞いたの。何のこと?
ペンギン先生 ペンギン先生
Goroutineは、プログラミング言語Goが提供する軽量な並行処理の単位だよ。OSのスレッドに似てるけど、もっとずっと軽くて、たくさん同時に動かせるのが特徴なんだ。
ひよこ ひよこ
スレッドと何が違うの?
ペンギン先生 ペンギン先生
OSのスレッドは1つ作るだけでも数MBのメモリを使うことがあるけど、Goroutineは数KB程度ととても軽量なんだよ。だから数万から数百万個も同時に立ち上げることができるんだ。
ひよこ ひよこ
そんなにたくさん作って、コンピュータは大丈夫なの?
ペンギン先生 ペンギン先生
実はGoroutine自体がOSのスレッド上で直接動くわけじゃなくて、Goのランタイムが少数のOSスレッドの上に大量のGoroutineをうまく割り振って動かしてくれているんだよ。だから効率よく大量の並行処理を扱えるんだ。
ひよこ ひよこ
使うときは難しいプログラムを書かないといけないの?
ペンギン先生 ペンギン先生
そんなことないよ。関数の前に"go"というキーワードを付けるだけで、その処理を新しいGoroutineとして並行に実行できるんだ。とてもシンプルに書けるのがGoの人気の理由の一つだね。
ひよこ ひよこ
たくさん動かした処理同士で情報をやり取りしたいときはどうするの?
ペンギン先生 ペンギン先生
Goには「チャネル(channel)」という仕組みがあって、Goroutine同士が安全にデータをやり取りできるようになっているんだよ。「メモリを共有して通信するな、通信することでメモリを共有せよ」というGoの設計思想を体現した仕組みなんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Goroutine」って出てきたら「Goの軽量な並行実行の単位」と思えればだいたいOK!
📖 おまけ:英語の意味
「Goroutine」 = Goのルーチン
💬 プログラミング言語「Go」と、処理のひとまとまりを表す「routine(ルーチン)」を組み合わせた言葉だよ。
← 用語集にもどる