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) }
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)) }()
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
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!