Apa arti "jalur panas" dalam konteks sinkronisasi. Sekali?

14

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:

  1. Apa artinya "jalur panas" di sini?

  2. Apakah "Ini pertama dalam struct" membuat akses "jalur panas" lebih efisien? Mengapa?

Yalou Wang
sumber
Mengapa menempatkan bidang lebih dulu lebih disukai dijelaskan dalam kalimat terakhir. Adakah yang tidak jelas tentang itu?
Peter

Jawaban:

10

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.

chmike
sumber
Bisakah Anda mengembangkan kalimat terakhir? ie.when itu tidak terjadi?
colminator
@colminator kompiler dapat memutuskan untuk mengubah urutan bidang struct dalam memori untuk mengoptimalkan ruang penyimpanan misalnya. Kompilator go tidak melakukan itu sejauh yang saya tahu.
chmike
1
@ chmike thx untuk jawaban Anda yang luar biasa. Saya ingin tahu apakah ini berarti saya harus meletakkan bidang yang sering diakses di tempat pertama sebuah struct dalam pekerjaan pemrograman harian saya?
Yalou Wang
1
@YalouWang Ini akan menjadi optimasi kecil. Ini hanya sepadan dengan usaha jika kinerja itu penting.
chmike