"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > L'impact de `runtime.gosched ()` avant et après le suivi de 1,5 sur l'exécution du programme GO

L'impact de `runtime.gosched ()` avant et après le suivi de 1,5 sur l'exécution du programme GO

Publié le 2025-04-14
Parcourir:758

How Does `runtime.Gosched()` Impact Go Program Execution Before and After Go 1.5?

comment le bossé affecte l'exécution des programmes go

problème

dans les versions go avant 1.5, un morceau de code impliquant runtime.gosched () a été observé pour affecter la sortie d'un programme:

func say(s string) {
    for i := 0; i  

Sortie avec runtime.gosched ():

hello
world
hello
world
hello
world
hello
world
hello

sortie sans runtime.gosched ():

hello
hello
hello
hello
hello

explication

dans les versions go avant 1.5, runtime.gosched () a explicitement donné le contrôle aux autres goroutines lorsqu'il est appelé. Alors que les programmes GO s'exécutent sur un seul thread de système d'exploitation par défaut, runtime.gosched () a permis au planificateur de changer l'exécution entre les Goroutines.

Lorsque GomaxProcs a été inférieur ou défini sur 1, le multitâche coopératif de GO a obligé les Goroutines pour donner explicitement le contrôle. Ainsi, dans l'exemple de code ci-dessus, la sortie "mondiale" n'apparaît que lorsque Runtime.gosched () a été appelée, car elle permettait au planificateur de passer au Goroutine exécutant l'instruction "World". Go peut créer plusieurs threads OS pour exécuter les Goroutines.

avec des gomaxprocs définis sur une valeur supérieure à 1, les goroutines peuvent fonctionner en parallèle. Cependant, contrairement aux systèmes multitâches préventifs, les Goroutines doivent toujours produire explicitement le contrôle pour permettre à d'autres Goroutines de s'exécuter. En effet, GO utilise le multitâche coopératif, où Goroutines rend volontairement le contrôle au planificateur.

implications pour le parallélisme

avec des gomaxprocs définis sur une valeur supérieure à 1, le résultat de l'interlimination des goroutines peut devenir indemine, car le planificateur peut changer l'exécution entre les goroutines à tout moment. Cela peut conduire à des modèles de sortie imprévisibles, comme le montre l'exemple ci-dessus lorsque GomaxProcs a été défini sur 2.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3