Sobes.tech
Junior — Middle

Pouvez-vous expliquer le principe du planificateur de tâches dans le langage Go et comment il interagit avec les threads système?

sobes.tech IA

Réponse de l'IA

Dans le langage Go, le planificateur (scheduler) gère les goroutines, qui sont des threads légers s'exécutant à l'intérieur d'un thread système (thread OS).

Go utilise un modèle M:N, où M est le nombre de threads système et N le nombre de goroutines. Le planificateur répartit les goroutines entre les threads disponibles, en basculant entre eux pour une utilisation efficace du CPU.

Composants principaux du planificateur :

  • G (goroutine) — structure représentant une goroutine.
  • M (machine) — thread système sur lequel s'exécutent les goroutines.
  • P (processeur) — processeur logique qui relie G et M, gérant l'exécution.

Principe de fonctionnement :

  1. Une goroutine (G) se voit attribuer un P.
  2. P se lie à M (thread système).
  3. M exécute la goroutine.
  4. Le planificateur bascule l'exécution entre les goroutines lorsqu'une se bloque (par exemple, en entrée/sortie) ou lorsque son quantum de temps expire.

Cela permet à Go d'utiliser efficacement les ressources système, assurant une haute concurrence sans avoir besoin de créer de nombreux threads système lourds.

Exemple de création d'une goroutine :

func main() {
    go func() {
        fmt.Println("Bonjour depuis la goroutine")
    }()
    fmt.Println("Bonjour depuis le main")
    time.Sleep(time.Second) // Attend pour que la goroutine ait le temps de s'exécuter
}