L'éditeur PHP Zimo a découvert que lors de l'utilisation de cgo, vous rencontrerez parfois un problème, c'est-à-dire que `__GI___pthread_mutex_unlock` prend la majeure partie du temps d'exécution. Ce problème peut entraîner une dégradation des performances et affecter l'efficacité de l'exécution du programme. Afin de résoudre ce problème, nous devons comprendre en profondeur la fonction et le principe de `__GI___pthread_mutex_unlock` et trouver la méthode d'optimisation correspondante. Cet article fournira une analyse détaillée de ce problème pour aider les lecteurs à mieux comprendre et résoudre ce problème.
J'utilise cgo pour appeler la fonction c depuis go. Il y a un rappel à la fonction go à l'intérieur de la fonction c. En d’autres termes, j’appelle go -> c ->
Après avoir exécuté pprof, j'ai remarqué que __gi___pthread_mutex_unlock
prenait la moitié du temps d'exécution. Autant que je sache, cgo a des frais généraux, en particulier les rappels de c to go. Mais étrangement, cgo passe la moitié de son temps d'exécution à effectuer du verrouillage. Y a-t-il un problème avec mon code ?
main.go
callback.go
Environnement opérationnel :
lscpu
aller en version linguistique
65bcae9650aaVoici le résultat pprof :
EDIT : Ajouter un environnement d'exécution
Bien que je ne puisse pas le reproduire avec le programme ci-dessus :
65bceaa20ecfMais il existe un mutex global pour chaque rappel, donc si vous effectuez des rappels parallèles, vous perdrez en performances.
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!