தொகுதி பாடங்கள் (3/5)
வரையறைகள் மற்றும் சுயவிவரங்கள்
செயல்பாட்டு சோதனைகளுக்கு கூடுதலாக, go test உள்ளமைக்கப்பட்ட ** தரவரிசைகள்** (BenchmarkXxx) மற்றும் CPU மற்றும் நினைவக சுயவிவரங்களை (pprof) ஆதரிக்கிறது. அனைத்தும் வெளிப்புற சார்பு இல்லாமல்.
ஒரு அளவுகோலின் வடிவம்
func BenchmarkSum(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = Sum(2, 3)
}
}சிறப்பியல்புகள்:
- சரியான கையொப்பம்:
func BenchmarkXxx(b *testing.B). - லூப்
b.Nமறு செய்கைகளை இயக்க வேண்டும்: கட்டமைப்பானதுb.Nஐ தானாகவே சரிசெய்கிறது, 1 இல் தொடங்கி அளவீடு நிலைப்படுத்தும் வரை வளரும் (இயல்புநிலையாக ~1 வினாடி). - முடிவு
ns/op(ஒரு செயல்பாட்டிற்கு நானோ விநாடிகள்) மற்றும்-benchmemஉடன்,B/opமற்றும்allocs/opஆகும்.
வழக்கமான கட்டளைகள்
go test -bench=. ./... # all benchmarks
go test -bench=Sum -benchmem # only Sum, with memory info
go test -bench=. -benchtime=5s # each benchmark for 5 seconds
go test -bench=. -cpuprofile=cpu.out # generate a CPU profileவழக்கமான வெளியீடு:
BenchmarkSum-8 1000000000 0.31 ns/op
-8 என்பது GOMAXPROCS மதிப்பு. 0.31 ns/op என்பது ஒரு அழைப்பிற்கான சராசரி நேரம்.
விலையுயர்ந்த அமைப்பு: b.ResetTimer
வளையத்திற்கு முன் நீண்ட தயாரிப்பு படி இருந்தால், அதை அளவீட்டிலிருந்து விலக்கவும்:
func BenchmarkSearch(b *testing.B) {
data := buildLargeSlice(1_000_000) // expensive
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = Search(data, 42)
}
}பயனுள்ள வகைகள்:
b.StopTimer()/b.StartTimer()— ஆர்வமற்ற கட்டத்தைச் சுற்றி அளவீட்டை இடைநிறுத்தவும் (லூப் உள்ளே எளிது).b.ReportAllocs()—-benchmemஇல்லாவிட்டாலும் கட்டாய ஒதுக்கீடு அறிக்கையிடல்.
b.Run உடன் பெஞ்ச்மார்க் அட்டவணை
சோதனைகளுக்கு t.Run போலவே, அளவுரு வரையறைகளுக்கு b.Run உள்ளது:
func BenchmarkSplit(b *testing.B) {
for _, size := range []int{10, 1000, 100000} {
b.Run(fmt.Sprintf("n=%d", size), func(b *testing.B) {
s := strings.Repeat("a,", size)
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = strings.Split(s, ",")
}
})
}
}BenchmarkSplit/n=10-8, BenchmarkSplit/n=1000-8, ... போன்ற வெளியீட்டு வரிசைகள் அளவிடுதல் விளக்கப்படங்களுக்கு சிறந்தது.
இரண்டு செயலாக்கங்களை benchstat உடன் ஒப்பிடுகிறது
go test -bench=. -count=10 > old.txt
# apply change
go test -bench=. -count=10 > new.txt
benchstat old.txt new.txtbenchstat (golang.org/x/perf/cmd/benchstat இல்) வித்தியாசத்தின் சராசரி, நிலையான விலகல் மற்றும் புள்ளியியல் முக்கியத்துவத்தைக் கணக்கிடுகிறது.
பயிற்சிகள்
Sum(2, 3) ஐ அழைக்கும் b.N மேல் உள்ள வளையத்துடன் BenchmarkSum ஐ வரையறுக்கவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
லூப்பிற்கு முன் விலையுயர்ந்த அமைப்பிற்குப் பிறகு b.ResetTimer ஐச் சேர்க்கவும், எனவே அமைப்பு அளவீட்டில் சேர்க்கப்படவில்லை.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
தொகுப்பில் உள்ள அனைத்து வரையறைகளையும் எந்தக் கொடி இயக்குகிறது?
$ go test ???