"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go의 Defer 키워드를 사용하여 함수 런타임을 정확하게 프로파일링하는 방법은 무엇입니까?

Go의 Defer 키워드를 사용하여 함수 런타임을 정확하게 프로파일링하는 방법은 무엇입니까?

2024년 11월 11일에 게시됨
검색:713

How Can Go's Defer Keyword Be Used to Accurately Profile Function Runtime?

Go의 함수 런타임 프로파일링: 정밀한 지연 접근 방식

소프트웨어 최적화 영역에서 함수 실행 시간 측정은 다음에 대한 귀중한 통찰력을 제공할 수 있습니다. 효율성 향상. 강력한 프로그래밍 언어인 Go는 함수 타이밍을 지정하고 런타임을 밀리초 단위로 반환하는 편리한 메커니즘을 제공합니다.

시간 측정 함수

우리의 모험을 시작하려면 프로파일링하려는 기능을 만듭니다. 이 예는 단순히 지정된 기간 동안 잠을 잔다:

func SleepFor(d time.Duration) {
    time.Sleep(d)
}

Go의 연기 이점

Go의 연기 키워드는 이러한 노력에 중요한 역할을 합니다. 바깥쪽 함수가 종료될 때까지 함수 실행을 연기함으로써 함수 호출과 실제 실행 사이에 경과된 시간을 측정할 수 있습니다.

시간 측정 코드

해보자 Trace와 un이라는 적절한 이름의 두 가지 도우미 함수를 소개합니다. Trace는 함수의 진입점을 기록하고 시작 시간을 캡처하는 반면, un은 종료점을 기록하고 경과 시간을 초 단위로 계산합니다.

func trace(s string) (string, time.Time) {
    log.Println("START:", s)
    return s, time.Now()
}

func un(s string, startTime time.Time) {
    endTime := time.Now()
    log.Println("  END:", s, "ElapsedTime in seconds:", endTime.Sub(startTime))
}

타이밍 구현

이제 이러한 도우미 기능을 SleepFor 기능에 통합해 보겠습니다.

func profileSleep(d time.Duration) {
    defer un(trace("SleepFor"))

    SleepFor(d)
}

Squeaky Clean 결과

이 우아한 구현을 통해 각 함수 호출에 대한 간결한 경과 시간 로그를 얻을 수 있습니다.

START: profileSleep
  END: profileSleep ElapsedTime in seconds: 0.50044

정확도 고려 사항

로그는 정확한 경과 시간을 제공하지만 로깅 문 자체에는 약간의 부정확성이 있다는 점은 주목할 가치가 있습니다. 더 높은 정밀도가 필요한 경우 대체 타이밍 메커니즘을 고려하세요.

결론

Go의 defer를 활용하면 타이밍 기능을 만들고 밀리초 단위로 런타임을 확보하는 것이 쉽습니다. 이 강력한 기술을 사용하면 코드 성능에 대한 통찰력을 얻을 수 있어 최적화를 통해 애플리케이션 효율성을 향상시킬 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3