일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- GO부하테스트
- GO벤치마킹
- pprof
- Go성능테스트
- golang벤치마크
- Go벤치마크
- vue3 axios
- go리플렉션성능
- golang uuid
- 디자인패컨
- line챠트
- go로드맵
- Golang디자인패턴
- Vue.js
- Iperf3
- Golang부하테스트
- Golang성능테스트
- Golang벤치마킹
- Line차트
- vue3-chartjs
- vue3 통신
- 디자인패턴학습필요성
- 리플렉션성능
- GObenchmark
- Golangbenchmark
- 챠트그리기
- 대역폭측정하기
- vue3
- Go디자인패턴
- snoflake
- Today
- Total
import ( "코딩", "행복", "즐거움" )
Golang 벤치마킹 함수 성능 개선 본문
원문: https://blog.logrocket.com/benchmarking-golang-improve-function-performance/
Benchmarking in Golang: Improving function performance - LogRocket Blog
Improve your Golang application's performance by running benchmarks with built-in tools like the testing package and the go tool.
blog.logrocket.com
Golang 에서 벤치마크 작성하기
go에 벤치마트 테스트 패키지 도구가 포함되어 있어 별도의 설치없이 벤치마크 성능 테스트를 할 수 있다.
간단한 벤치마크 코드를 작성 한다
main.go에 성능을 테스트하기 위한 함수를 만든다.
// main.go
func primeNumbers(max int) []int {
var primes []int
for i := 2; i < max; i++ {
isPrime := true
for j := 2; j <= int(math.Sqrt(float64(i))); j++ {
if i%j == 0 {
isPrime = false
break
}
}
if isPrime {
primes = append(primes, i)
}
}
return primes
}
main_test.go에 main.go에 만들었던 함수를 성능테스트하는 벤치마크 코드를 작성 한다.
package main
import (
"testing"
)
var num = 1000
func BenchmarkPrimeNumbers(b *testing.B) {
for i := 0; i < b.N; i++ {
primeNumbers(num)
}
}
벤치마크 함수의 시작은 Benchmark로 시작 해야 하며 func BenchmarkXxx(*testing.B)testing.B 와 같은 형식을 유지해야 한다.
b.N은 반복횟수를 의미하고, 값은 정해져있지 않으며, 실행 시 동적으로 할당되며, 최소 1초 동안 실행 된다.
Golang에서 벤치마크 실행하기
go test -bench=. 명령을 이용해서 실행한다.
$ go test -bench=.
goos: linux
goarch: amd64
pkg: github.com/ayoisaiah/random
cpu: Intel(R) Core(TM) i7-7560U CPU @ 2.40GHz
BenchmarkPrimeNumbers-4 14588 82798 ns/op
PASS
ok github.com/ayoisaiah/random 2.091s
실행 시 운영체제, 아키텍처, 패키지 및 CPU사양을 설명하고, 벤치마크에 사용된 cpu 수량도 출력한다.
14588은 함수가 실행된 총 횟수이고, 82798 ns/op는 평균 시간으로 나노초로 표시 된다.
벤치마크를 여러번 실행 할 수 도 있는데, 아래와 같은 명령어를 사용 한다.
$ go test -bench=. -count 5
goos: linux
goarch: amd64
pkg: github.com/ayoisaiah/random
cpu: Intel(R) Core(TM) i7-7560U CPU @ 2.40GHz
BenchmarkPrimeNumbers-4 14485 82484 ns/op
BenchmarkPrimeNumbers-4 14557 82456 ns/op
BenchmarkPrimeNumbers-4 14520 82702 ns/op
BenchmarkPrimeNumbers-4 14407 87850 ns/op
BenchmarkPrimeNumbers-4 14446 82525 ns/op
PASS
ok github.com/ayoisaiah/random 10.259s
'GO' 카테고리의 다른 글
GO 백엔드 개발자 학습 로드맵 (0) | 2022.11.16 |
---|---|
GO 디자인 패턴에 관심이 있다면 ?? (0) | 2022.11.16 |
pprof (0) | 2022.10.05 |
메모리 절약 패키지, fieldalignment 사용 (0) | 2022.10.03 |
Go 필드 정렬해서 메모리 절약하기 (0) | 2022.10.03 |