Go
Goroutines
Ricerca…
introduzione
Una goroutine è un thread leggero gestito dal runtime Go.
vai f (x, y, z)
avvia una nuova goroutine in esecuzione
f (x, y, z)
La valutazione di f, x, yez avviene nella goroutine corrente e l'esecuzione di f avviene nella nuova goroutine.
Le goroutine vengono eseguite nello stesso spazio degli indirizzi, pertanto l'accesso alla memoria condivisa deve essere sincronizzato. Il pacchetto di sincronizzazione fornisce primitive utili, anche se non ne avrete bisogno molto in Go in quanto vi sono altre primitive.
Riferimento: https://tour.golang.org/concurrency/1
Goroutines Programma base
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")
}
Una goroutine è una funzione che è in grado di funzionare in concomitanza con altre funzioni. Per creare una goroutine usiamo la parola chiave go
seguita da una funzione invocazione:
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)
}
Generalmente, la chiamata di funzione esegue tutte le istruzioni all'interno del corpo della funzione e torna alla riga successiva. Ma con le goroutine torniamo immediatamente alla riga successiva in quanto non aspetta che la funzione si completi. Quindi, è stata inclusa una chiamata a una funzione Scanln
, altrimenti il programma è stato chiuso senza stampare i numeri.