Hoe wordt het model van werken met gelijktijdigheid en synchronisatie geïmplementeerd in de programmeertaal Go?
sobes.tech AI
Antwoord van AI
In de programmeertaal Go wordt gelijktijdigheid geïmplementeerd via lichte draden genaamd goroutines. Goroutines worden gestart met het sleutelwoord go en werken parallel, terwijl de Go-runtime zelf hun planning beheert.
Voor synchronisatie en gegevensuitwisseling tussen goroutines worden verschillende mechanismen gebruikt:
-
Kanalen (channels) — zorgen voor veilige gegevensoverdracht tussen goroutines en garanderen synchronisatie. Kanalen kunnen worden beschouwd als wachtrijen die de zender blokkeren als ze vol zijn en de ontvanger als ze leeg zijn.
-
Package sync — bevat synchronisatie-primitieven zoals mutexes (
sync.Mutex), voorwaardelijke variabelen (sync.Cond), wachtgroepen (sync.WaitGroup) en andere.
Voorbeeld van gebruik van goroutines en kanalen:
package main
import (
"fmt"
"time"
)
func worker(id int, ch chan string) {
time.Sleep(time.Second)
ch <- fmt.Sprintf("Werker %d klaar", id)
}
func main() {
ch := make(chan string)
for i := 1; i <= 3; i++ {
go worker(i, ch)
}
for i := 1; i <= 3; i++ {
msg := <-ch
fmt.Println(msg)
}
}
Hier worden drie goroutines parallel uitgevoerd, en het kanaal wordt gebruikt om de resultaten van elk te ontvangen.