wersja go: 1.13.4 W kodzie źródłowym sync / once.go następujące komentarze wspominały o „gorącej ścieżce”:
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
}
Moje pytania to:
Co oznacza tutaj „gorąca ścieżka”?
Czy „To pierwsze w strukturze” sprawia, że dostęp do „gorącej ścieżki” jest bardziej wydajny? Dlaczego?
Odpowiedzi:
Gorąca ścieżka to ciąg instrukcji wykonywanych bardzo często.
Uzyskując dostęp do pierwszego pola struktury, możemy bezpośrednio wyrejestrować wskaźnik na strukturę, aby uzyskać dostęp do pierwszego pola. Aby uzyskać dostęp do innych pól, musimy podać przesunięcie od pierwszej wartości oprócz wskaźnika struct.
W kodzie maszynowym to przesunięcie jest dodatkową wartością, którą należy przekazać wraz z instrukcją, która wydłuża go. Wpływ na wydajność polega na tym, że procesor musi wykonać dodanie przesunięcia do wskaźnika struktury, aby uzyskać adres wartości, do której ma uzyskać dostęp.
Zatem kod maszynowy umożliwiający dostęp do pierwszego pola struktury jest bardziej zwarty i szybszy.
Zauważ, że zakłada to, że układ wartości pól w pamięci jest taki sam jak w definicji struktury.
źródło