[go] 동기화 컨텍스트에서 “핫 경로”는 무엇을 의미합니까?

go version : 1.13.4 소스 코드 sync / once.go 에서 다음 주석은 “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
}

내 질문은 :

  1. 여기서 “핫 경로”는 무엇을 의미합니까?

  2. “최초의 구조”가 “핫 경로”액세스를보다 효율적으로 만드는가? 왜?



답변

핫 경로는 매우 자주 실행되는 일련의 명령입니다.

구조의 첫 번째 필드에 액세스 할 때 첫 번째 필드에 액세스하기 위해 구조에 대한 포인터를 직접 역 참조 할 수 있습니다. 다른 필드에 액세스하려면 구조체 포인터 외에 첫 번째 값에서 오프셋을 제공해야합니다.

기계 코드에서이 오프셋은 명령과 함께 전달되는 추가 값으로 더 길어집니다. 성능에 미치는 영향은 CPU가 구조체 포인터에 오프셋을 추가하여 액세스 할 값의 주소를 가져와야한다는 것입니다.

따라서 구조체의 첫 번째 필드에 액세스하는 머신 코드는 더 작고 빠릅니다.

이것은 메모리에서 필드 값의 레이아웃이 구조체 정의와 동일하다고 가정합니다.


답변