Sobes.tech
Junior — Middle

Quelles conséquences cela aura-t-il sur le fonctionnement du programme si GOMAXPROCS est fixé à 1 et qu'une goroutine infinie est lancée?

sobes.tech IA

Réponse de l'IA

Configurer GOMAXPROCS à 1 limite le nombre de threads du système d'exploitation que le planificateur Go peut utiliser à un seul thread. Si une goroutine infinie est lancée dans ce scénario :

  • Tous les calculs seront effectués séquentiellement sur un seul thread.
  • Si la goroutine infinie ne contient pas de points où un changement de contexte se produit (par exemple, des appels à des opérations bloquantes ou runtime.Gosched()), d'autres goroutines peuvent ne pas obtenir de temps d'exécution, ce qui entraînera un "gel" du programme.
  • En conséquence, le programme peut ne plus répondre ou fonctionner très lentement, car le planificateur ne pourra pas basculer efficacement entre les goroutines.

Exemple :

package main

import (
    "runtime"
    "time"
    "fmt"
)

func main() {
    runtime.GOMAXPROCS(1)

    go func() {
        for {
            // boucle infinie sans appel à runtime.Gosched()
        }
    }()

    time.Sleep(time.Second)
    fmt.Println("Programme terminé")
}

Dans cet exemple, la goroutine principale peut ne pas obtenir de temps d'exécution si la goroutine infinie ne cède pas le contrôle, ce qui entraînera un "gel" du programme.