go version: 1.13.4 Im Quellcode sync / Once.go wurde in den folgenden Kommentaren "Hot Path" erwähnt:
type Once struct {
// done indicates whether the action has been performed.
// It is first in the struct because it is used in the hot path.
// The hot path is inlined at every call site.
// Placing done first allows more compact instructions on some architectures (amd64/x86),
// and fewer instructions (to calculate offset) on other architectures.
done uint32
m Mutex
}
Meine Fragen sind:
Was bedeutet "heißer Weg" hier?
Macht "Es ist das erste in der Struktur" einen "Hot Path" -Zugriff effizienter? Warum?
Antworten:
Ein Hot Path ist eine Folge von Anweisungen, die sehr häufig ausgeführt werden.
Beim Zugriff auf das erste Feld einer Struktur können wir den Zeiger direkt auf die Struktur dereferenzieren, um auf das erste Feld zuzugreifen. Um auf andere Felder zugreifen zu können, müssen wir zusätzlich zum Strukturzeiger einen Versatz vom ersten Wert angeben.
Im Maschinencode ist dieser Offset ein zusätzlicher Wert, der mit der Anweisung übergeben werden muss, wodurch er länger wird. Die Auswirkung auf die Leistung besteht darin, dass die CPU den Offset zum Strukturzeiger addieren muss, um die Adresse des Werts abzurufen, auf den zugegriffen werden soll.
Somit ist der Maschinencode für den Zugriff auf das erste Feld einer Struktur kompakter und schneller.
Beachten Sie, dass dies voraussetzt, dass das Layout der Feldwerte im Speicher das gleiche ist wie in der Strukturdefinition.
quelle