Wie können wir die Ausführungszeit einer Funktion mithilfe der „defer'-Anweisung von Go genau messen?

Linda Hamilton
Freigeben: 2024-11-17 14:49:02
Original
682 Leute haben es durchsucht

How Can We Accurately Measure Function Execution Time Using Go's `defer` Statement?

Defer-Timing: Genaue Zeitmessung in Go erreichen

In Go ermöglicht uns die Defer-Anweisung, die Ausführung einer Funktion bis zum zu verzögern umgebende Funktion kehrt zurück. Obwohl diese Funktion von Vorteil sein kann, kann sie beim Versuch, die Ausführungszeit einer Funktion zu messen, zu Herausforderungen führen.

Betrachten Sie die folgende Funktion:

func sum() {
    start := time.Now()

    //expecting to print non zero value but always gets 0
    defer fmt.Println(time.Now().Sub(start))

    sum := 0
    for i := 1; i < 101; i++ {
        sum += i
    }
    time.Sleep(1 * time.Second)
    fmt.Println(sum)
}
Nach dem Login kopieren

In dieser Funktion möchten wir drucken die Zeit, die zum Ausführen der inneren Schleife benötigt wird. Unsere Erwartung wird jedoch nicht erfüllt und die Ausgabe zeigt immer 0.

Der Grund für diese Diskrepanz liegt in der Auswertung der Argumente für die verzögerte Funktion. Die Argumente werden ausgewertet, wenn die Funktion zurückgestellt wird, nicht wenn sie tatsächlich ausgeführt wird. Zum Zeitpunkt der Ausführung der verzögerten Funktion (wenn die umgebende Funktion zurückkehrt) ist die Schleife bereits abgeschlossen, was zu einer verstrichenen Zeit von 0 führt.

Um dieses Problem zu beheben und eine verstrichene Zeit ungleich Null zu erhalten, können wir dies tun Ändern Sie den Code wie folgt:

defer func() { fmt.Println(time.Now().Sub(start)) }()
Nach dem Login kopieren

Indem wir den verzögerten Funktionsaufruf in eine zusätzliche anonyme Funktion einbinden, verzögern wir die Ausführung des Codes, der die Startzeit auswertet. Dadurch wird sichergestellt, dass es unmittelbar vor der Ausführung des verzögerten Funktionsaufrufs ausgewertet und aktualisiert wird.

Dieser Ansatz ermöglicht es uns, die Ausführungszeit der inneren Schleife genau zu messen:

start time: 2023-02-07 16:25:42.39378981 +0000 UTC
end time: 2023-02-07 16:25:42.40889486 +0000 UTC
time taken: 15.11010505ns
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie können wir die Ausführungszeit einer Funktion mithilfe der „defer'-Anweisung von Go genau messen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage