在sync.Once中,“热路径”是什么意思?

时间:2019-12-04 10:46:40

标签: go

执行版本: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. “它是结构中的第一个”是否会使“热路径”访问更有效?为什么?

1 个答案:

答案 0 :(得分:10)

热路径是非常频繁执行的一系列指令。

在访问结构的第一个字段时,我们可以直接取消对结构的指针的引用以访问第一个字段。要访问其他字段,除了结构指针之外,我们还需要提供与第一个值的偏移量。

在机器代码中,此偏移量是随指令传递的一个附加值,该值使其更长。性能影响是CPU必须对struct指针添加偏移量以获取要访问的值的地址。

因此,用于访问结构的第一个字段的机器代码更加紧凑和快速。

请注意,这假设字段值在内存中的布局与结构定义中的相同。