Sync.Once bağlamında “etkin yol” ne demektir?


14

go sürümü: 1.13.4 Kaynak kodu sync / once.go içinde , aşağıdaki yorumlar "etkin yol" dan bahsetmiştir:

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
}

Sorularım:

  1. "Sıcak yol" burada ne anlama geliyor?

  2. "Yapıda bir ilk" bir "sıcak yol" erişimi daha verimli hale getiriyor mu? Neden?


Alanı ilk sıraya yerleştirmenin neden tercih edileceği son cümlede açıklanmaktadır. Bu konuda belirsiz olan bir şey var mı?
Peter

Yanıtlar:


10

Sıcak yol, çok sık yürütülen bir talimatlar dizisidir.

Bir yapının ilk alanına erişirken, ilk alana erişmek için işaretçiyi yapıya doğrudan atayabiliriz. Diğer alanlara erişmek için, yapı işaretçisine ek olarak ilk değerden bir uzaklık sağlamamız gerekir.

Makine kodunda, bu ofset, daha uzun yapan talimatla geçmek için ek bir değerdir. Performans etkisi, CPU'nun erişilecek değerin adresini almak için yapı işaretçisine ofset eklemesi yapması gerektiğidir.

Böylece bir yapının ilk alanına erişmek için makine kodu daha kompakt ve daha hızlı olur.

Bunun, bellekteki alan değerlerinin düzeninin yapı tanımındakiyle aynı olduğunu varsaydığını unutmayın.


Son cümleyi genişletebilir misin? Yani durum böyle değil mi?
colminator

@colminator bir derleyici, örneğin depolama alanını optimize etmek için bellekteki bir yapının alan sırasını değiştirmeye karar verebilir. Go derleyicisi bunu bildiğim kadarıyla yapmıyor.
chmike

1
Mükemmel cevabınız için @chmike thx. Bilmek istiyorum, sık sık erişilen alanı günlük programlama çalışmamda bir yapının ilk yerine koymam gerektiği anlamına mı geliyor?
Yalou Wang

1
@YalouWang Küçük bir optimizasyon olurdu. Sadece performans önemli ise çabaya değer.
chmike
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.