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.