Що означає "гарячий шлях" в контексті синхронізації?


14

перейти до версії: 1.13.4 У вихідному коді sync / Once.go наступні коментарі згадували "гарячий шлях":

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
}

Мої запитання:

  1. Що тут означає "гарячий шлях"?

  2. Чи робить "Перший в структурі" доступ до "гарячої стежки" більш ефективним? Чому?


Чому краще розміщувати поле першим, пояснюється в останньому реченні. Щось незрозумілого з цього приводу?
Петро

Відповіді:


10

Гарячий шлях - це послідовність інструкцій, що виконуються дуже часто.

Отримавши доступ до першого поля структури, ми можемо безпосередньо знеструмити вказівник на структуру, щоб отримати доступ до першого поля. Для доступу до інших полів нам потрібно надати зміщення від першого значення на додаток до вказівника на структуру.

У машинному коді це зміщення - це додаткове значення, яке потрібно передавати інструкції, що робить його довшим. Ефект від продуктивності полягає в тому, що центральний процесор повинен виконати додавання зміщення до структурного покажчика, щоб отримати адресу значення для доступу.

Таким чином машинний код для доступу до першого поля структури є більш компактним та швидшим.

Зауважимо, що це передбачає, що розташування значень полів у пам'яті таке ж, як у визначенні структури.


Чи можете ви розширити на останнє речення? тобто коли це не так?
колонізатор

@colminator компілятор міг вирішити змінити порядок поля структури в пам'яті, щоб, наприклад, оптимізувати місце для зберігання. Наскільки мені відомо, компілятор go не робить цього.
chmike

1
@chmike thx за відмінну відповідь. Я хотів би знати, чи означає це, що я повинен ставити поле, що часто звертається, на перше місце структури в своїй щоденній роботі з програмування?
Yalou Wang

1
@YalouWang Це була б невелика оптимізація. Варто докласти зусиль, лише якщо важлива продуктивність.
chmike
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.