Heim  >  Artikel  >  Backend-Entwicklung  >  go - `__GI___pthread_mutex_unlock` nimmt bei Verwendung von cgo die meiste Ausführungszeit in Anspruch

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

WBOY
WBOYnach vorne
2024-02-10 09:45:08464Durchsuche

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen