Sobes.tech
Junior — Middle

Comment l'exécution d'une goroutine est-elle liée aux threads du processeur et comment est-elle assignée à un thread spécifique?

sobes.tech IA

Réponse de l'IA

Dans Go, les goroutines sont des threads légers gérés par le runtime de Go, et non directement par le système d'exploitation. Elles s'exécutent à l'intérieur des threads du système d'exploitation, mais Go utilise un planificateur propre qui répartit de nombreuses goroutines sur un nombre limité de threads (M — threads du système d'exploitation).

L'attribution d'une goroutine à un thread se fait via un modèle M:N, où M est le nombre de threads du système d'exploitation et N est le nombre de goroutines. Le planificateur de Go change dynamiquement l'exécution des goroutines entre les threads pour utiliser efficacement les ressources du processeur.

Ainsi, une goroutine n'est pas liée à un thread de processeur spécifique, mais le planificateur de Go décide sur quel thread et quand elle sera exécutée. Cela permet de lancer des milliers de goroutines avec des coûts minimes par rapport aux threads du système d'exploitation.

Exemple:

func main() {
    go func() {
        fmt.Println("Goroutine en cours")
    }()
    time.Sleep(time.Second)
}

Ici, la goroutine est lancée et le planificateur de Go lui assignera une exécution sur l'un des threads disponibles du système d'exploitation.