Özet - Benchmark
- Go kursu
- Orta seviye
- Ders 52/80
- 4 dk
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
package main
import (
"fmt"
"sync/atomic"
"testing"
)
func main() {
// buraya yaz
}Örnek çözüm
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ü
b.RunParallel(func(pb *testing.PB) {
for pb.____() {
isle()
}
})
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 |