Junior
Qu'est-ce que les goroutines?
sobes.tech IA
Réponse de l'IA
Fils d'exécution légers, gérés par l'environnement d'exécution de Go. Ils sont créés avec le mot-clé go avant d'appeler une fonction.
Caractéristiques principales :
- Moins de consommation mémoire : La goroutine commence avec une taille de pile petite (généralement 2 Ko), qui peut augmenter ou diminuer dynamiquement.
- Création plus rapide : La création d'une goroutine est beaucoup plus rapide que la création d'un thread système.
- Multiplexage sur les threads système : Plusieurs goroutines peuvent être multiplexées sur un nombre réduit de threads système par le planificateur de Go.
- Planification coopérative : Les goroutines ne sont pas préemptivement interrompues ; elles cèdent volontairement le contrôle au planificateur (par exemple, lors d'appels bloquants ou d'appels explicites à
runtime.Gosched()).
Exemple de création :
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Bonjour depuis la goroutine!")
}
func main() {
go sayHello() // Lance sayHello comme une goroutine
fmt.Println("Bonjour depuis la fonction principale!")
time.Sleep(1 * time.Second) // Pour que la fonction principale ne se termine pas avant la goroutine
}
Comparaison avec les threads :
| Caractéristique | Goroutines de Go | Threads du système d'exploitation |
|---|---|---|
| Gestion | Environnement d'exécution de Go | Système d'exploitation |
| Consommation mémoire | Faible, pile dynamique | Élevée, pile fixe |
| Création | Rapide | Lente |
| Planification | Coopérative | Préemptive |
| Synchronisation | Canaux, package sync | Mutex, sémaphores du système d'exploitation |