Benchmark karşılaştırma
- Go kursu
- Orta seviye
- Ders 51/80
- 4 dk
benchstat ile benchmark sonuçlarını karşılaştırmayı öğrenirsin.
Benchmark karşılaştırma
Tek bir çalıştırma gürültülüdür. Doğru karşılaştırma için her sürümü birkaç kez çalıştırıp benchstat ile istatistiksel olarak kıyaslarsın:
go test -bench=Ayristir -count=10 > eski.txt
# kodu değiştir
go test -bench=Ayristir -count=10 > yeni.txt
benchstat eski.txt yeni.txtbenchstat ortalama farkı, güven aralığını ve farkın anlamlı olup olmadığını (p-değeri) gösterir.
Gürültüyü azaltmak
Ölçüm sırasında makinede başka yoğun iş çalıştırma, dizüstüde şarj kablosunu tak (güç tasarrufu frekansı düşürür) ve -count ile en az 6–10 örnek al. CI'da performans gerilemelerini yakalamak için benchmark sonuçlarını saklayıp her değişiklikte benchstat ile karşılaştırmak yaygın bir uygulamadır.
Uygulama Basit kıyas
İki birleştirme yöntemini kıyasla: += ile ve strings.Builder ile 50 parça birleştir. Her biri için 5 kez testing.Benchmark çalıştırıp en küçük NsPerOp değerini al ve Builder'ın daha hızlı olduğunu yazdır.
Başlangıç kodu
package main
import (
"fmt"
"strings"
"testing"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"strings"
"testing"
)
var sink string
func enIyi(f func()) int64 {
var min int64 = -1
for k := 0; k < 5; k++ {
r := testing.Benchmark(func(b *testing.B) {
for i := 0; i < b.N; i++ {
f()
}
})
if min < 0 || r.NsPerOp() < min {
min = r.NsPerOp()
}
}
return min
}
func main() {
arti := enIyi(func() {
s := ""
for i := 0; i < 50; i++ {
s += "x"
}
sink = s
})
builder := enIyi(func() {
var sb strings.Builder
for i := 0; i < 50; i++ {
sb.WriteString("x")
}
sink = sb.String()
})
fmt.Println(builder < arti)
}Beklenen çıktı
true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 benchstat "~" gösteriyorsa ne anlama gelir?
- Kod iki kat hızlandı
- Benchmark hata verdi
- Ayırma yok
- Fark istatistiksel olarak anlamlı değil Doğru cevap
Açıklama: "~" ölçülen farkın gürültüden ayırt edilemediğini söyler; değişikliğin performansa etkisi kanıtlanamamıştır.
2 Tekrar sayısı
go test -bench=. ____=10 > yeni.txt
go test -bench=. -count=10 > yeni.txt
Açıklama: -count her benchmark'ı belirtilen sayıda çalıştırır; benchstat bu örneklerle istatistik hesaplar.
3 Araç ve görev
| Kavram | Anlamı |
|---|---|
-count=10 |
Çok örnek |
benchstat |
İstatistiksel kıyas |
p-değeri |
Anlamlılık |
~ |
Anlamlı fark yok |