-
Golang 실행 시간 측정Golang 2022. 7. 28. 16:34
프로그램의 성능을 확인하기 위해 실행시간을 측정해야 할 때가 있다. 이번에는 Golang에서 코드가 실행되는데 걸리는 시간을 측정하는 방법을 알아보자.
time 패키지 사용
import ( "time" )
- time 패키지는 시간을 표현하기 위한 Time 타입을 제공한다. 나노초 단위의 정밀도를 가진 구조체인데 세가지의 프로퍼티를 가진다
type Time struct { wall uint64 ext int64 loc *Location }
- 위 세가지의 프로퍼티의 정확한 쓰임새를 이해하지는 못했지만 time 패키지를 사용하는데는 아무런 문제가 없다.
시간 측정
- time 패키지는 많은 기능을 제공해주지만 실행 시간 측정을 위해서는 다음 2가지만 알면 된다
- `time.Now()`, `time.Since()`
- `time.Now()` 부터 `time.Since()`까지의 시간을 측정할 수 있다.
- 예시
package main import ( "fmt" "time" ) func main() { // 여기서 부터 시간 측정 시작 start := time.Now() for i := 1; i <= 15; i++ { time.Sleep(1) } // end 까지 걸린 시간을 측정 end := time.Since(start) fmt.Printf("실행시간 : %s\n", end) }
Goroutine 시간 측정
- goroutine을 사용하면 위의 방법으로 시간을 측정할 수 없다.
- 고루틴 함수가 진행되는 도중에 end가 측정되버리기 때문
sync 패키지 사용
import ( "time" "sync" )
- sync 패키지를 사용하면 고루틴이 끝날때 까지 기다린 후 시간을 측정할 수 있다.
- `sync.WaitGroup`를 사용
- 고루틴이 시작 될 때 `wg.Add(1)`로 WaitGroup에 진행중인 고루틴 갯수를 추가하고 고루틴이 끝날때 마다 `wg.Done()`로 WaitGroup에 진행중인 고루틴 갯수를 하나씩 줄인다. `wg.Wait()`를 이용해 WaitGroup에서 모든 고루틴이 끝날때 까지 기다렸다가 시간측정을 한다.
- 예시
package main import ( "fmt" "time" "sync" ) // WaitGroup var wg sync.WaitGroup func main() { // 여기서 부터 시간 측정 시작 start := time.Now() // wg.Add : WaitGroup 에 대기 중인 고루틴 갯수 추가 for i := 0; i < 10; i++ { wg.Add(1) go func(idx int) { // 고루틴 함수가 한번 끝날 때 마다 WaitGroup 에 대기 중인 고루틴 갯수를 하나씩 뺀다. defer wg.Done() for j := 0; j <= 100; j++ { fmt.Println(j) } }() } // 모든 고루틴이 종료될 때까지 기다렸다가 wg.Wait() // end 까지 걸린 시간을 측정 end := time.Since(start) fmt.Printf("실행시간 : %s\n", end) }
'Golang' 카테고리의 다른 글
Go 함수 파라미터 유동적으로 사용하기 (0) 2023.09.08 Command Line Argument (0) 2022.07.25 고루틴(goroutine) (0) 2022.07.12