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; iSortie avec runtime.gosched ():
hello world hello world hello world hello world hellosortie sans runtime.gosched ():
hello hello hello hello helloexplication
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.
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