Sobes.tech
Junior — Middle

Comment la concurrence, l'asynchronie et le parallélisme sont-ils implémentés dans le langage Go?

sobes.tech IA

Réponse de l'IA

En Go, la concurrence, l’asynchronie et la parallélisation sont réalisées à l’aide de goroutines et de canaux.

  • Goroutines — ce sont des threads légers qui sont lancés avec le mot-clé go. Ils permettent d’exécuter des fonctions de manière asynchrone et de concurrencer pour les ressources.
  • Canaux sont utilisés pour échanger des données en toute sécurité entre les goroutines, assurant la synchronisation et la transmission de messages.

La parallélisation est atteinte en lançant plusieurs goroutines qui peuvent s’exécuter simultanément sur plusieurs cœurs de processeur, si l’on définit GOMAXPROCS.

Exemple:

package main
import (
    "fmt"
    "time"
)

func worker(id int, ch chan string) {
    time.Sleep(time.Second)
    ch <- fmt.Sprintf("Travailleur %d terminé", id)
}

func main() {
    ch := make(chan string)
    for i := 1; i <= 3; i++ {
        go worker(i, ch) // lance une goroutine
    }
    for i := 1; i <= 3; i++ {
        msg := <-ch // reçoit le résultat du canal
        fmt.Println(msg)
    }
}

Ainsi, Go offre des moyens simples et efficaces pour travailler avec la concurrence et le parallélisme.