Maison >développement back-end >Golang >Quand les Goroutines cèdent-elles au Go ?
À quels moments une Goroutine peut-elle donner lieu à une exécution ?
Dans les programmes Go, les goroutines, des threads d'exécution légers, peuvent céder le pas à d'autres goroutines à divers points, permettant la concurrence et une utilisation efficace des ressources. Cependant, toutes les exécutions de goroutines ne sont pas sujettes à céder.
Traditionnellement, les goroutines étaient connues pour céder principalement face au blocage des appels système (syscals). Cependant, comme indiqué dans les discussions précédentes, les appels de fonction peuvent également déclencher des changements de goroutine lors des contrôles de croissance de la pile.
Le comportement décrit dans la question, où une goroutine semble produire même sans appels de fonction ou syscals, a été abordé avec le introduction de la préemption asynchrone dans Go version 1.14. Cette amélioration confère aux goroutines la possibilité d'être préemptées à presque tous les stades de leur exécution, même dans des boucles sans fin sans appels de fonction.
Bien que la préemption asynchrone offre une amélioration significative de la réactivité du planificateur, il est important de noter que les points de préemption peuvent varient selon les différentes versions de Go. Par conséquent, il n'est généralement pas recommandé de s'appuyer sur des points de préemption spécifiques à des fins de synchronisation.
Dans l'exemple de code fourni dans la question, le manque de synchronisation autour du tableau de sortie et de l'index oi complique l'analyse du comportement de rendement. L'utilisation de chaînes dans le tableau de sortie pourrait potentiellement impliquer un garbage collection, ce qui peut introduire des points de planification.
Essentiellement, les goroutines de Go permettent une exécution à différents moments, y compris les appels système, les appels de fonction et les points de préemption asynchrones qui peuvent survenir. presque n'importe où. La préemption asynchrone a considérablement amélioré le comportement de planification des goroutines, mais il est essentiel d'éviter de s'appuyer sur des points de préemption spécifiques pour la synchronisation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!