Maison  >  Article  >  développement back-end  >  go - `__GI___pthread_mutex_unlock` prend la majeure partie du temps d'exécution lors de l'utilisation de cgo

go - `__GI___pthread_mutex_unlock` prend la majeure partie du temps d'exécution lors de l'utilisation de cgo

WBOY
WBOYavant
2024-02-10 09:45:08465parcourir

go - 使用 cgo 时,`__GI___pthread_mutex_unlock` 占用大部分执行时间

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.

Contenu de la question

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

65bcae965051

callback.go

65bcae965088

Environnement opérationnel :

lscpu

65bcae965093

aller en version linguistique

65bcae9650aa

Voici le résultat pprof :

EDIT : Ajouter un environnement d'exécution

Solution de contournement

Bien que je ne puisse pas le reproduire avec le programme ci-dessus :

65bceaa20ecf

Mais 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer