Go
Goroutines
Sök…
Introduktion
En goroutine är en lätt tråd som hanteras av Go runtime.
gå f (x, y, z)
startar en ny goroutin kör
f (x, y, z)
Utvärderingen av f, x, y och z sker i den aktuella goroutinen och exekveringen av f sker i den nya goroutinen.
Goroutiner körs i samma adressutrymme, så åtkomst till delat minne måste synkroniseras. Synkroniseringspaketet innehåller användbara primitiv, även om du inte behöver dem mycket i Go eftersom det finns andra primitiva.
Referens: https://tour.golang.org/concurrency/1
Goroutines Basic Program
package main
import (
"fmt"
"time"
)
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")
}
En goroutin är en funktion som kan köras samtidigt med andra funktioner. För att skapa en goroutine använder vi nyckelordet go
följt av en funktionskall:
package main
import "fmt"
func f(n int) {
for i := 0; i < 10; i++ {
fmt.Println(n, ":", i)
}
}
func main() {
go f(0)
var input string
fmt.Scanln(&input)
}
I allmänhet kör funktionssamtal alla uttalanden inuti funktionskroppen och återgår till nästa rad. Men med goroutiner återgår vi omedelbart till nästa rad eftersom det inte väntar på att funktionen ska slutföras. Så ingår ett samtal till en Scanln
funktion, annars har programmet gått ut utan att skriva ut siffrorna.