Maison > développement back-end > Golang > Les Goroutines ont-ils un contrôle au-delà des appels système et des appels de fonction ?

Les Goroutines ont-ils un contrôle au-delà des appels système et des appels de fonction ?

Patricia Arquette
Libérer: 2024-12-13 13:47:11
original
441 Les gens l'ont consulté

Do Goroutines Yield Control Beyond System Calls and Function Calls?

Les goroutines donnent des points au-delà des appels système

Dans les programmes Go, les goroutines sont le principal mécanisme de concurrence. Bien que les appels système qui bloqueraient une goroutine soient des seuils de rendement connus, la compréhension de la planification des goroutines n'est pas complète sans considérer d'autres seuils de rendement possibles.

Un point de rendement suspecté concerne les appels de fonction, car ils nécessitent que le planificateur vérifie la pile. croissance. Cependant, il a été déclaré qu '"une goroutine verrouillera le thread jusqu'à ce qu'il quitte ou frappe quelque chose qui pourrait donner lieu à l'exécution par d'autres" s'il effectue uniquement des opérations mathématiques.

Pour tester cela, un programme a été créé qui s'exécute trois boucles (une dans la fonction principale et deux dans des goroutines séparées) sans aucun appel de fonction. Le programme définit GOMAXPROCS sur 1, limitant le nombre de threads du système d'exploitation pouvant exécuter du code Go simultanément. Cependant, la sortie affiche toujours des messages entrelacés de la fonction principale et des goroutines, ce qui suggère que les goroutines cèdent le contrôle même sans appels de fonction.

La réponse à cette divergence apparente réside dans la préemption asynchrone introduite dans Go 1.14, qui ajoute du potentiel. points de préemption presque partout. Par conséquent, les goroutines peuvent céder le contrôle à divers moments autres que le blocage des appels système.

Bien que l'implémentation exacte des points de préemption puisse changer entre les versions de Go, la préemption asynchrone garantit que les boucles sans appels de fonction ne bloquent plus le planificateur ou ne retardent pas considérablement les déchets. collection. Néanmoins, il est important de noter que les écritures de tableau non synchronisées et les mises à jour d'index non atomiques peuvent introduire des points de planification coopérative susceptibles d'avoir un impact sur le comportement du programme.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal