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.
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
callback.go
Betriebsumgebung:
lscpu
Sprachversion aufrufen
65bcae9650aaDas ist das pprof-Ergebnis:
EDIT: Laufzeitumgebung hinzufügen
Obwohl ich es mit dem oben genannten Programm nicht reproduzieren kann:
65bceaa20ecfAber 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!