go - `__GI___pthread_mutex_unlock` nimmt bei Verwendung von cgo die meiste Ausführungszeit in Anspruch

WBOY
Freigeben: 2024-02-10 09:45:08
nach vorne
465 Leute haben es durchsucht

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

Der PHP-Editor Zimo hat festgestellt, dass bei der Verwendung von cgo manchmal ein Problem auftritt, das heißt, dass „__GI___pthread_mutex_unlock“ den größten Teil der Ausführungszeit in Anspruch nimmt. Dieses Problem kann zu Leistungseinbußen führen und die Ausführungseffizienz des Programms beeinträchtigen. Um dieses Problem zu lösen, müssen wir die Funktion und das Prinzip von „__GI___pthread_mutex_unlock“ genau verstehen und die entsprechende Optimierungsmethode finden. Dieser Artikel bietet eine detaillierte Analyse dieses Problems, um den Lesern zu helfen, dieses Problem besser zu verstehen und zu lösen.

Frageninhalt

Ich verwende cgo, um eine c-Funktion von go aus aufzurufen. Innerhalb der c-Funktion gibt es einen Rückruf zur go-Funktion. Mit anderen Worten, ich rufe go -> c -> auf.

Nachdem ich pprof ausgeführt hatte, bemerkte ich, dass __gi___pthread_mutex_unlock die Hälfte der Ausführungszeit in Anspruch nahm. Afaik, cgo hat Overhead, insbesondere Rückrufe von c to go. Aber seltsamerweise verbringt CGO die Hälfte seiner Ausführungszeit mit Sperren. Stimmt etwas mit meinem Code nicht?

main.go

65bcae965051

callback.go

65bcae965088

Betriebsumgebung:

lscpu

65bcae965093

Sprachversion aufrufen

65bcae9650aa

Das ist das pprof-Ergebnis:

EDIT: Laufzeitumgebung hinzufügen

Workaround

Obwohl ich es mit dem oben genannten Programm nicht reproduzieren kann:

65bceaa20ecf

Aber es gibt einen globalen Mutex für jeden Rückruf. Wenn Sie also parallele Rückrufe durchführen, kommt es zu Leistungseinbußen.

Das obige ist der detaillierte Inhalt vongo - `__GI___pthread_mutex_unlock` nimmt bei Verwendung von cgo die meiste Ausführungszeit in Anspruch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!