並列実行のゴルーチン
【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト
【ゴルーチンとは】
Goでは、スレッドよりも小さい単位で処理単位であるゴルーチンが並行して動作するように実装されています。→並列処理
【ゴルーチンをするには】
並列実行したい関数は、goを前につけて呼び出すだけでゴルーチンにすることができる
例
go function()
ゴルーチンを呼び出す側はゴルーチンが終了するのを待ちません。
・サンプルコード
// ゴルーチン
package main
import (
"fmt"
"time"
)
// 一度に文字列(厳密には文字)を1個出力すつことを10回繰り返す関数を定義する
func printjob(s string) {
for i := 0; i < 10; i++ {
time.Sleep(10 * time.Millisecond)
fmt.Printf("%s", s)
}
}
func main() {
fmt.Println("A start")
go printjob("A") //ゴルーチン
fmt.Println("B start")
go printjob("B") //ゴルーチン
fmt.Println("C start")
go printjob("C") //ゴルーチン
//指定した時間だけ待ちます。ここでは1秒
time.Sleep(1*time.Second)
fmt.Printf("\n終了\n")
・実行
PS D:\GO言語\サンプルプログラム\Go-8> go run goroutine.go
A start
B start
C start
CABABCCBABCACBABCACBAACBCABACB
終了
出力が「CABABCCBABCACBABCACBAACBCABACB」になっている店に注目。順番がバラバラなのはゴルーチンの実行順序は状況によって変わるからです。