A Tour of Goでの説明
Goroutines
goroutine (ゴルーチン)は、Goのランタイムに管理される軽量なスレッドです...
https://go-tour-jp.appspot.com/concurrency/1
ザックリとした現状の理解
Goにおける並行処理の機能で、軽量、非同期的に複数のスレッドを容易に実行できる。
共有メモリへのアクセスは同期する必要がある。
動作の現状の理解
main()が終了すると、ゴルーチンも終了する。
論理的なスレッドであるものの、並行処理(Concurrency)と並列処理(Parallelism)の概念がある様で、裏っ側ではCPUにも依存する部分もある模様。
非常に軽量で何百万ものスレッドを同時に使える。
ゴルーチン指向
package main
import (
"fmt"
"sync"
"time"
)
func say(s string, wg *sync.WaitGroup) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
wg.Done() // 終了したらDoneを呼び出すことで、Addで渡した数字が‐1される
}
func main() {
var wg sync.WaitGroup // WaitGroupを作成
wg.Add(2) // 待つゴルーチンの数を2つ増やす
go say("world", &wg) // ゴルーチンを立ち上げ、WaitGroupを渡す
say("hello", &wg) // メインゴルーチン?
wg.Wait() // 全てのゴルーチンが終了するのを待つ
}
/* A Tour of Goのコード
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
*/