Benchmark fonksiyonu
- Go kursu
- Orta seviye
- Ders 47/80
- 4 dk
func BenchmarkXxx imzasını ve go test -bench öğrenirsin.
Benchmark fonksiyonu
Benchmark'lar _test.go dosyasında Benchmark ile başlar ve *testing.B alır. Ölçülecek kod b.N kez çalıştırılır; Go, b.N'yi ölçüm güvenilir olana kadar otomatik büyütür.
func BenchmarkBirlestir(b *testing.B) {
for i := 0; i < b.N; i++ {
strings.Join([]string{"a", "b", "c"}, ",")
}
}Çalıştırma: go test -bench=. -benchmem → BenchmarkBirlestir-8 25000000 48 ns/op 16 B/op 1 allocs/op
Derleyiciyi kandırmamak
Sonucu hiç kullanılmayan bir hesap derleyici tarafından silinebilir ve benchmark gerçekte hiçbir şey ölçmez. Sonucu paket düzeyi bir değişkene ata:
var sink string
func BenchmarkX(b *testing.B) {
for i := 0; i < b.N; i++ {
sink = strings.Repeat("a", 10)
}
}Go 1.24'ten itibaren for b.Loop() { ... } biçimi bu sorunu ve zamanlayıcı ayarlarını kendisi çözer.
Uygulama İlk benchmark
testing.Benchmark ile strings.Repeat yerine fmt.Sprintf("%d", i) çağıran bir benchmark çalıştır; sonucu sink değişkenine ata. Sonucun N değerinin 0'dan büyük olduğunu yazdır.
Başlangıç kodu
package main
import (
"fmt"
"testing"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"testing"
)
var sink string
func main() {
r := testing.Benchmark(func(b *testing.B) {
for i := 0; i < b.N; i++ {
sink = fmt.Sprintf("%d", i)
}
})
fmt.Println(r.N > 0)
}Beklenen çıktı
true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Çıktıdaki <code>-8</code> soneki neyi gösterir?
- Tekrar sayısı
- Ayırma sayısı
- Go sürümü
- GOMAXPROCS değeri Doğru cevap
Açıklama: Benchmark adının sonundaki sayı, ölçümün kaç P ile yapıldığını söyler; -cpu=1,4 ile farklı değerler denenebilir.
2 Tekrar sayısı
for i := 0; i < b.____; i++ {
sink = hesapla()
}
for i := 0; i < b.N; i++ {
sink = hesapla()
}
Açıklama: b.N, Go'nun ölçüm için seçtiği tekrar sayısıdır.
3 Çıktı sütunu
| Kavram | Anlamı |
|---|---|
ns/op |
İşlem başına süre |
B/op |
İşlem başına bayt |
allocs/op |
İşlem başına ayırma |
-8 |
GOMAXPROCS |