>백엔드 개발 >Golang >Go `time` 패키지가 구현이 필요 없는 `startTimer` 함수를 사용하는 이유는 무엇입니까?

Go `time` 패키지가 구현이 필요 없는 `startTimer` 함수를 사용하는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-18 17:21:10195검색

Why Does the Go `time` Package Use an Implementation-less `startTimer` Function?

함수 본체 없는 함수 호출

함수를 검사하기 위해 "time" 패키지의 코드를 탐색할 때 After(d Duration) <-chan Time, 특이한 점 발견:

func After(d Duration) <-chan Time {
    return NewTimer(d).C
}

func NewTimer(d Duration) *Timer {
    c := make(chan Time, 1)
    t := &Timer{
        C: c,
        r: runtimeTimer{
            when: nano() + int64(d),
            f:    sendTime,
            arg:  c,
        },
    }
    startTimer(&t.r)
    return t
}

startTimer 함수가 구현되지 않은 것 같습니다. own:

func startTimer(*runtimeTimer)

질문:

  1. startTimer의 실제 코드는 어디에 있나요?
  2. 왜 "추상 메서드"가 있나요? ?
  3. Go 개발자는 어떤 이유를 가지고 이렇게 했나요? 디자인?

정답:

  1. 실제 코드 위치:

    The startTimer의 코드는 다음 어셈블리 루틴에 있습니다. 정의됨:

    //go:linkname startTimer time.startTimer
    // startTimer adds t to the timer heap.
    func startTimer(t *timer) {
        if raceenabled {
            racerelease(unsafe.Pointer(t))
        }
        addtimer(t)
    }
  2. Go의 추상 메서드:

    Go에서 함수 선언은 함수 본문을 생략할 수 있습니다. 이러한 선언은 Go 외부에서 구현된 함수의 서명만 지정합니다. B. 어셈블리 루틴으로.

  3. 설계 이유:

    모든 프로그래밍 언어가 자체 런타임을 완벽하게 표현할 수 있는 것은 아닙니다. Go 런타임 및 표준 라이브러리의 일부는 C로 작성되고, 일부는 어셈블러로 작성되며, 기타 일부는 Go와 C의 종합적으로 문서화되지 않은 혼합인 ".goc"로 작성됩니다.

위 내용은 Go `time` 패키지가 구현이 필요 없는 `startTimer` 함수를 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.