go version: 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
}
Мои вопросы:
Что значит «горячий путь» здесь?
Делает ли «Это первым в структуре» доступ по «горячему пути» более эффективным? Почему?
Ответы:
Горячий путь - это последовательность инструкций, выполняемых очень часто.
При доступе к первому полю структуры мы можем напрямую разыменовать указатель на структуру для доступа к первому полю. Чтобы получить доступ к другим полям, нам нужно предоставить смещение от первого значения в дополнение к указателю структуры.
В машинном коде это смещение является дополнительным значением для передачи инструкции, что делает его длиннее. Влияние на производительность заключается в том, что ЦП должен выполнить добавление смещения к указателю структуры, чтобы получить адрес доступного значения.
Таким образом, машинный код для доступа к первому полю структуры более компактен и быстрее.
Обратите внимание, что это предполагает, что расположение значений поля в памяти такое же, как в определении структуры.
источник