CodeBlanks Logo Icon CodeBlanks

Özet - Benchmark

b.Run ve b.ReportAllocs ile bir slice benchmark'ı yazarsın.

Benchmark özeti

Akış: BenchmarkXxx(b *testing.B) yaz → sonucu sink'e ata → hazırlığı b.ResetTimer() ile dışarıda bırak → -benchmem ile ayırmayı gör → b.Run ile boyutlara böl → -count=10 + benchstat ile kıyasla. Gerekirse -cpuprofile ile profil al.

Hatırla: benchmark tek başına değil, profil ve gerçek üretim ölçümleriyle birlikte yorumlanır.

RunParallel

Eşzamanlı kullanılan bir yapının (önbellek, havuz) gerçek yük altındaki davranışını ölçmek için:

func BenchmarkOnbellek(b *testing.B) {
    o := yeniOnbellek()
    b.RunParallel(func(pb *testing.PB) {
        for pb.Next() {
            o.Al("anahtar")
        }
    })
}

-cpu=1,2,4,8 ile çalıştırınca ölçeklenmeyen (çekirdek arttıkça yavaşlayan) kod hemen görünür.

Uygulama Paralel benchmark

atomic.Int64 sayacını b.RunParallel içinde pb.Next() döngüsüyle artıran bir benchmark'ı testing.Benchmark ile çalıştır. Sayacın 0'dan büyük olduğunu yazdır.

Başlangıç kodu

main.go
package main

import (
    "fmt"
    "sync/atomic"
    "testing"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "fmt"
    "sync/atomic"
    "testing"
)

func main() {
    var sayac atomic.Int64
    testing.Benchmark(func(b *testing.B) {
        b.RunParallel(func(pb *testing.PB) {
            for pb.Next() {
                sayac.Add(1)
            }
        })
    })
    fmt.Println(sayac.Load() > 0)
}

Beklenen çıktı

true

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Paralel performansı ölçmek için hangi yöntem kullanılır?

  • b.Loop
  • b.Parallel
  • b.RunParallel Doğru cevap
  • b.Run

Açıklama: RunParallel işi GOMAXPROCS kadar goroutine'e dağıtır; kilit çekişmesi gibi eşzamanlılık maliyetlerini ortaya çıkarır.

2 Paralel döngü

Soru
b.RunParallel(func(pb *testing.PB) {
    for pb.____() {
        isle()
    }
})
Cevap
b.RunParallel(func(pb *testing.PB) {
    for pb.Next() {
        isle()
    }
})

Açıklama: pb.Next her goroutine'e sıradaki tekrarı verir; tekrarlar bitince false döner.

3 Grubun özeti

Kavram Anlamı
b.N Tekrar sayısı
b.ResetTimer Hazırlığı çıkar
b.Run Alt ölçüm
b.RunParallel Eşzamanlı yük

Orta seviye bölümündeki tüm dersler