versi go: 1.13.4 Dalam sinkronisasi kode sumber / once.go , komentar berikut menyebutkan "hot path":
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
}
Pertanyaan saya adalah:
Apa artinya "jalur panas" di sini?
Apakah "Ini pertama dalam struct" membuat akses "jalur panas" lebih efisien? Mengapa?
Jawaban:
Jalur panas adalah urutan instruksi yang dieksekusi sangat sering.
Saat mengakses bidang pertama dari suatu struktur, kita dapat secara langsung merujuk pointer ke struktur untuk mengakses bidang pertama. Untuk mengakses bidang lain, kami perlu menyediakan offset dari nilai pertama sebagai tambahan dari penunjuk struct.
Dalam kode mesin, offset ini adalah nilai tambahan untuk diteruskan dengan instruksi yang membuatnya lebih lama. Dampak kinerja adalah bahwa CPU harus melakukan penambahan offset ke penunjuk struct untuk mendapatkan alamat nilai yang akan diakses.
Dengan demikian kode mesin untuk mengakses bidang pertama dari struct lebih kompak dan lebih cepat.
Perhatikan bahwa ini mengasumsikan bahwa tata letak nilai bidang dalam memori sama dengan definisi struct.
sumber