0Pricing
Go Academy · Ders

testing.B ile Karşılaştırma Testleri Yazma

BenchmarkXxx, b.N döngüsü ve -bench bayrağı

testing.B ile Karşılaştırma Testleri Yazma, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Performans ölçümü işlev imzası

Performans ölçümleri Benchmark ile başlar ve *testing.B alır. Normal sınamaların yanında aynı _test.go dosyasında çalışırlar.

func BenchmarkAdd(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Add(2, 3)
    }
}

b.N

Sınama çerçevesi, performans ölçümünün en az 1 saniye sürmesini sağlayana kadar b.N değerini — döngü yinelemelerinin sayısını — otomatik olarak ayarlar ve işlem başına kararlı bir nanosaniye değeri üretir.

Performans ölçümlerini çalıştırma

Performans ölçümleri yalnızca go test ile çalıştırılmaz. Etkinleştirmek için -bench kullanın:

go test -bench=. -benchmem ./...
// BenchmarkAdd-8  500000000  2.13 ns/op  0 B/op  0 allocs/op

-benchmem işareti

-benchmem, ayırma istatistiklerini ekler: işlem başına bayt ve işlem başına ayırma sayısı. Çok sayıda ayırma genellikle performans sorunlarına işaret eder.

b.ResetTimer

Performans ölçümünde sayılmaması gereken pahalı kurulumdan sonra b.ResetTimer() çağırın:

func BenchmarkQuery(b *testing.B) {
    db := setupDB() // expensive
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        db.Query("SELECT 1")
    }
}

b.StopTimer / b.StartTimer

Performans ölçüm süresine dahil edilmemesi gereken kurulum veya temizleme sırasında zamanlayıcıyı duraklatıp yeniden başlatın.

for i := 0; i < b.N; i++ {
    b.StopTimer()
    data := generateInput()
    b.StartTimer()
    process(data)
}

b.SetBytes

Zaman/işlem değerine ek olarak aktarım hızını (bayt/sn) bildirmek için b.SetBytes(n) çağırın. Serileştirme veya ağ kodlarını ölçmek için kullanışlıdır.

b.SetBytes(int64(len(payload)))
for i := 0; i < b.N; i++ {
    encode(payload)
}

Performans ölçümlerini karşılaştırma

İki performans ölçümü çalıştırmasını karşılaştırmak ve istatistiksel olarak anlamlı farkları görmek için benchstat kullanın:

go test -bench=. -count=10 > before.txt
# make change
go test -bench=. -count=10 > after.txt
benchstat before.txt after.txt

Kullanılmayan kodun elenmesini önleme

Derleyicinin ölçülen kodu eniyileştirme sırasında kaldırmasını önlemek için sonucu paket düzeyinde bir değişkene veya bir havuza atayın:

var result int
func BenchmarkFib(b *testing.B) {
    for i := 0; i < b.N; i++ {
        result = Fib(20)
    }
}

Alt performans ölçümleri

Tablo güdümlü sınamalara benzer şekilde, adlandırılmış alt performans ölçümleri oluşturmak için b.Run kullanın:

for _, size := range []int{10, 100, 1000} {
    b.Run(fmt.Sprintf("size=%d", size), func(b *testing.B) {
        for i := 0; i < b.N; i++ { sort(make([]int, size)) }
    })
}

Performans ölçümü ve profilleme

Performans ölçümleri performansı nicelendirir. Profilleme (pprof), zamanın nerede harcandığını gösterir. Ölçmek için performans ölçümlerini, nerede eniyileme yapılacağını teşhis etmek için profillemeyi kullanın.

Hızlı Kontrol

Derleyicinin eniyileme yapmasını önlemek için performans ölçümü döngüsünün gövdesi neden sonucu kullanmalıdır?

Özet: Performans ölçümleri

Temel noktalar:

  • BenchmarkXxx(b *testing.B) ile for i := 0; i < b.N; i++
  • Ayırma istatistikleri için go test -bench=. -benchmem
  • Pahalı kurulumdan sonra b.ResetTimer()
  • Çalıştırmaları karşılaştırmak için benchstat kullanın; elenmeyi önlemek için sonuçları atayın

Sıkça Sorulan Sorular

“testing.B ile Karşılaştırma Testleri Yazma” dersi ücretsiz mi?

Evet — “testing.B ile Karşılaştırma Testleri Yazma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“testing.B ile Karşılaştırma Testleri Yazma” dersinde ne öğreneceğim?

BenchmarkXxx, b.N döngüsü ve -bench bayrağı Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“testing.B ile Karşılaştırma Testleri Yazma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. testing.B ile Karşılaştırma Testleri Yazma
  2. pprof ile CPU Profilleme
  3. Yığın ve Ayırma Profillemesi
  4. Yürütme İzleme
← Go Academy Sayfasına Dön