suchen
HeimBackend-EntwicklungGolangBenchmark mit Golang

Hallo Gophers?

In diesem Blogbeitrag zeige ich Ihnen, wie Sie ein fantastisches Tool verwenden, das im #golang-Testpaket integriert ist. Wie würden Sie die Leistung eines Codeteils oder einer Funktion testen? Verwenden Sie Benchmark--Tests.

Lass uns gehen.

Für diesen Test verwende ich die klassische Fibonacci-Zahl oder Fibonacci-Folge, die bestimmt wird durch:

if (x 



<p>Diese Reihenfolge ist wichtig, da sie auch in mehreren Teilen der Mathematik und der Natur vorkommt, wie unten gezeigt:</p>

<p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/172554306490300.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Benchmark with Golang"></p>

<p>Es gibt mehrere Möglichkeiten, diesen Code zu implementieren, und ich werde zwei für unsere Benchmark-Tests auswählen: die rekursiven und iterativen Methoden zur Berechnung. Das Hauptziel der Funktionen besteht darin, eine <em>Position</em> bereitzustellen und die Fibonacci-Zahl an dieser Position zurückzugeben.</p>

<h2>
  
  
  Rekursive Methode
</h2>



<pre class="brush:php;toolbar:false">// main.go

func fibRecursive(n int) int {
    if n 



<h2>
  
  
  Iterative Methode
</h2>



<pre class="brush:php;toolbar:false">// main.go

func fibIterative(position uint) uint {
    slc := make([]uint, position)
    slc[0] = 1
    slc[1] = 1

    if position 



<p>Diese Methoden sind nicht optimiert, aber die Ergebnisse der Tests unterscheiden sich selbst bei einer kleinen Anzahl erheblich. Das werden Sie in den Tests sehen. Um dem Code zu folgen, klicken Sie hier.</p>

<p>Jetzt schreiben wir für die <strong>Benchmark-</strong>-Tests einige Tests in die Datei _main_test.go. Mithilfe der Golang-Dokumentation zum <strong>Benchmark</strong> können Sie die zu testenden Funktionen wie folgt erstellen:<br>
</p>

<pre class="brush:php;toolbar:false">// main_test.go

// The key is to start every function you want to benchmark with the keyword Benchmark and use b *testing.B instead of t *testing.T as input 
func BenchmarkFibIterative(b *testing.B) {
    // Use this for-loop to ensure the code will behave correctly. 
    // Now, you can put the function or piece of code you want to test
    for i := 0; i 



<blockquote>
<p>Frage, bevor Sie fortfahren: Welches ist schneller?</p>
</blockquote>

<p>Lassen Sie uns den Test für eine kleine Zahl (10) und für eine etwas größere Zahl (80) durchführen. Um die <strong>Benchmark</strong>-Tests auszuführen, führen Sie einfach den Befehl aus:</p>

<p>Gehen Sie test -bench=NameoftheFunction</p>

<p>Wenn Sie mehr über diesen Befehl erfahren möchten, schauen Sie hier nach.</p>

<p><strong>Erster Test: Position=10</strong><br>
</p>

<pre class="brush:php;toolbar:false">//(fibIterative)
Results:
cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
BenchmarkFibIterative-8         24491042                42.50 ns/op
PASS
ok      playground      1.651s

Lass uns mit Hilfe dieses Bildes analysieren:

Benchmark with Golang

Dem Bild zufolge haben wir 8 Kerne für die Tests, keine zeitliche Begrenzung (es läuft bis zum Abschluss). Es dauerte 1,651 Sekunden, um die Aufgabe abzuschließen.

==== Extra ====
We got 24,491,042 iterations (computations), and each iteration (op) took 42.50 ns.

Doing some math, we can calculate how much time one op took:

42.50 ns/op with 1 ns = 1/1,000,000,000 s
op ≈ 2.35270590588e-12 s
==== Extra ====

Das ist ein gutes Ergebnis. Schauen wir uns die rekursive Funktion für Position 10 an:

// Results
BenchmarkFibRecursive-8          6035011               187.8 ns/op
PASS
ok      playground      1.882s

Wir können sehen, dass es 1,882 Sekunden gedauert hat, um die Aufgabe abzuschließen.

Die iterative Funktion gewann mit ein paar Dezisekunden Vorsprung. Versuchen wir noch einen Test mit:

Position 50

// Results for the Iterative Function

cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
BenchmarkFibIterative-8         27896118                45.37 ns/op
PASS
ok      playground      2.876s

// Results for the Recursive Function

cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
BenchmarkFibRecursive-8          6365198               186.3 ns/op
PASS
ok      playground      1.918s

Wow! Jetzt ist die rekursive Funktion schneller?

Beenden wir mit einer etwas größeren Zahl.

Position 80

// Results for the Iterative Function

cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
BenchmarkFibIterative-8          5102344               229.5 ns/op
PASS
ok      playground      1.933s

// Results for the Recursive Function
// My poor PC couldn’t handle it, so I had to reduce the position to 50 just to get some results printed.

cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
BenchmarkFibRecursive-8                1        44319299474 ns/op
PASS
ok      playground      44.951s

Der Unterschied ist riesig. Für Position 80 dauerte der iterative Ansatz etwa 2 Sekunden. Für Position 50 dauerte die rekursive Funktion etwa 45 Sekunden. Dies zeigt, wie wichtig es ist, Ihren Code zu vergleichen, wenn Ihr Golang-Projekt langsamer wird.

Abschluss

Wenn Ihr Produktionscode langsam läuft oder unvorhersehbar langsamer ist, können Sie diese Technik in Kombination mit pprof oder anderen Tools aus dem integrierten Testpaket verwenden, um die Leistung Ihres Codes zu identifizieren und zu testen schlecht und wie man es optimiert.

Randbemerkung: Nicht jeder Code, der schön für das Auge ist, ist leistungsfähiger.

Zusätzliche Übung

Können Sie einen besseren Weg finden, die rekursive Funktion zu verbessern? (Tipp: Verwenden Sie dynamische Programmierung). In diesem Artikel wird erklärt, warum für einige kleine Zahlen die rekursive Strategie besser ist.

Das obige ist der detaillierte Inhalt vonBenchmark mit Golang. 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
C und Golang: Wenn die Leistung von entscheidender Bedeutung istC und Golang: Wenn die Leistung von entscheidender Bedeutung istApr 13, 2025 am 12:11 AM

C eignet sich besser für Szenarien, in denen eine direkte Kontrolle der Hardware -Ressourcen und hohe Leistungsoptimierung erforderlich ist, während Golang besser für Szenarien geeignet ist, in denen eine schnelle Entwicklung und eine hohe Parallelitätsverarbeitung erforderlich sind. 1.Cs Vorteil liegt in den nahezu Hardware-Eigenschaften und hohen Optimierungsfunktionen, die für leistungsstarke Bedürfnisse wie die Spieleentwicklung geeignet sind. 2. Golangs Vorteil liegt in seiner präzisen Syntax und der natürlichen Unterstützung, die für die Entwicklung einer hohen Parallelitätsdienste geeignet ist.

Golang in Aktion: Beispiele und Anwendungen in realer WeltGolang in Aktion: Beispiele und Anwendungen in realer WeltApr 12, 2025 am 12:11 AM

Golang zeichnet sich in praktischen Anwendungen aus und ist für seine Einfachheit, Effizienz und Parallelität bekannt. 1) Die gleichzeitige Programmierung wird über Goroutinen und Kanäle implementiert, 2) Flexibler Code wird unter Verwendung von Schnittstellen und Polymorphismen geschrieben, 3) Vereinfachen Sie die Netzwerkprogrammierung mit NET/HTTP -Paketen, 4) Effiziente gleichzeitige Crawler erstellen, 5) Debuggen und Optimierung durch Tools und Best Practices.

Golang: Die Go -Programmiersprache erklärtGolang: Die Go -Programmiersprache erklärtApr 10, 2025 am 11:18 AM

Zu den Kernmerkmalen von GO gehören die Müllsammlung, statische Verknüpfung und Unterstützung der Parallelität. 1. Das Parallelitätsmodell von GO -Sprache realisiert eine effiziente gleichzeitige Programmierung durch Goroutine und Kanal. 2. Schnittstellen und Polymorphismen werden durch Schnittstellenmethoden implementiert, so dass verschiedene Typen einheitlich verarbeitet werden können. 3. Die grundlegende Verwendung zeigt die Effizienz der Funktionsdefinition und des Aufrufs. 4. In der fortgeschrittenen Verwendung bieten Scheiben leistungsstarke Funktionen der dynamischen Größenänderung. 5. Häufige Fehler wie Rassenbedingungen können durch Getest-Race erkannt und gelöst werden. 6. Leistungsoptimierung wiederverwenden Objekte durch Sync.Pool, um den Druck der Müllabfuhr zu verringern.

Golangs Zweck: Aufbau effizienter und skalierbarer SystemeGolangs Zweck: Aufbau effizienter und skalierbarer SystemeApr 09, 2025 pm 05:17 PM

Go Language funktioniert gut beim Aufbau effizienter und skalierbarer Systeme. Zu den Vorteilen gehören: 1. hohe Leistung: Kompiliert in den Maschinencode, schnelle Laufgeschwindigkeit; 2. gleichzeitige Programmierung: Vereinfachen Sie Multitasking durch Goroutinen und Kanäle; 3. Einfachheit: präzise Syntax, Reduzierung der Lern- und Wartungskosten; 4. plattform: Unterstützt die plattformübergreifende Kompilierung, einfache Bereitstellung.

Warum scheinen die Ergebnisse der Ordnung nach Aussagen in der SQL -Sortierung manchmal zufällig zu sein?Warum scheinen die Ergebnisse der Ordnung nach Aussagen in der SQL -Sortierung manchmal zufällig zu sein?Apr 02, 2025 pm 05:24 PM

Verwirrt über die Sortierung von SQL -Abfragenergebnissen. Während des Lernens von SQL stoßen Sie häufig auf einige verwirrende Probleme. Vor kurzem liest der Autor "Mick-SQL Basics" ...

Ist die Konvergenz für Technologiestapel nur ein Prozess der Technologie -Stapelauswahl?Ist die Konvergenz für Technologiestapel nur ein Prozess der Technologie -Stapelauswahl?Apr 02, 2025 pm 05:21 PM

Die Beziehung zwischen Technologiestapelkonvergenz und Technologieauswahl in der Softwareentwicklung, der Auswahl und dem Management von Technologiestapeln ist ein sehr kritisches Problem. In letzter Zeit haben einige Leser vorgeschlagen ...

Wie kann man den Reflexionsvergleich verwenden und die Unterschiede zwischen drei Strukturen in GO verwandeln?Wie kann man den Reflexionsvergleich verwenden und die Unterschiede zwischen drei Strukturen in GO verwandeln?Apr 02, 2025 pm 05:15 PM

Wie man drei Strukturen in der GO -Sprache vergleicht und umgeht. Bei der Go -Programmierung ist es manchmal notwendig, die Unterschiede zwischen zwei Strukturen zu vergleichen und diese Unterschiede auf die ...

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)