Heim >Backend-Entwicklung >Golang >Warum ist mein Cgo-Code langsamer als der erwartete Go-Code?

Warum ist mein Cgo-Code langsamer als der erwartete Go-Code?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-02 09:44:10330Durchsuche

Why is my Cgo code slower than expected Go code?

Warum ist CGO so langsam?

Ihr Testcode vergleicht die Ausführungszeit von C- und Go-Funktionen, die jeweils 100 Millionen Mal ausgeführt werden. Die C-Funktion dauert länger als die Golang-Funktion und Sie befürchten, dass mit Ihrem Testcode etwas nicht stimmt.

Der hohe Overhead beim Aufrufen von C/C-Code über CGo minimiert CGo-Aufrufe am besten. Im bereitgestellten Beispiel könnte es effizienter sein, eine C-Schleife zu erstellen, anstatt eine CGo-Funktion wiederholt in einer Schleife aufzurufen.

Die Einrichtung der Go-Laufzeit für ihre Threads kann die Erwartungen an C-Code auf verschiedene Arten durchbrechen:

  1. Relativ kleine Goroutine-Stacks
  2. Unsachgemäße Interaktion mit dem lokalen Thread-Speicher von libpthread Implementierung
  3. Störung des UNIX-Signalhandlers der Go-Laufzeit
  4. Potenzieller Nachteil für andere Goroutinen, wenn C-Code einen Thread monopolisiert

Daher wählt CGo den sicheren Ansatz der Ausführung C-Code in einem separaten Thread mit einem herkömmlichen Stapel.

Im Gegensatz zu Sprachen wie Python, bei denen das Umschreiben von Code Hotspots darstellt in C zur Beschleunigung von Programmen üblich war, ist Gos Leistungsunterschied zwischen C- und Go-Code viel geringer. Erwägen Sie, CGo für die Schnittstelle zu vorhandenen Bibliotheken zu reservieren, möglicherweise mit kleinen C-Wrapper-Funktionen, um die Anzahl der von Go erforderlichen Aufrufe zu reduzieren.

Das obige ist der detaillierte Inhalt vonWarum ist mein Cgo-Code langsamer als der erwartete Go-Code?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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