Performans Ölçme
Benchmark modülü
Performans Ölçme, CoddyKit'te ücretsiz bir Ruby 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, Ruby Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Ruby Academy kursu toplamda 4 dersten oluşur.
Neden Ölçüm Yapılır
Ölçmeden iyileştirme yapmak tahminde bulunmaktır. Ruby'nin standart kitaplığındaki Benchmark modülü kodun süresini hassas biçimde ölçer.
- Değiştirmeden önce yavaş kısımları bulun
- Uygulamaları nesnel biçimde karşılaştırın
- Erken optimizasyondan kaçının
require 'benchmark'
time = Benchmark.realtime do
1_000_000.times { |i| i * 2 }
end
puts "Took #{time.round(4)}s"Benchmark.measure
Benchmark.measure, kullanıcı, sistem ve gerçek süreleri içeren bir rapor döndürür.
- Kullanıcı süresi, kodunuzun kullandığı CPU süresidir
- Gerçek süre, duvar saatiyle ölçülen geçen süredir
require 'benchmark'
result = Benchmark.measure do
500_000.times { |i| i.to_s }
end
puts resultBenchmark.bm
Benchmark.bm, bir tabloda birden çok bloğu çalıştırıp etiketler.
- Hizalama için bir etiket genişliği verin
- Her
x.reportbir satırdır
require 'benchmark'
Benchmark.bm(10) do |x|
x.report('to_s:') { 100_000.times { |i| i.to_s } }
x.report('inspect:') { 100_000.times { |i| i.inspect } }
endBenchmark.bmbm
Benchmark.bmbm, önbellekleri ve çöp toplayıcıyı ısıtmak için önce bir prova çalıştırır; böylece daha adil sonuçlar elde edilir.
- İlk geçiş atılır
- İkinci geçiş gerçek ölçümdür
require 'benchmark'
Benchmark.bmbm do |x|
x.report('sum:') { (1..100_000).sum }
x.report('reduce:') { (1..100_000).reduce(:+) }
endHızlı Zamanlama için Gerçek Süre
Benchmark.realtime, yalnızca duvar saatiyle geçen saniyeleri kayan noktalı sayı olarak döndürür.
- Tek bir bloğun süresini ölçmenin en basit yoludur
- Anlık kontroller için uygundur
require 'benchmark'
elapsed = Benchmark.realtime do
arr = Array.new(100_000) { rand }
arr.sort
end
puts "Sorted in #{elapsed.round(4)}s"Monotonik Saat
Sistem saati değişikliklerinden etkilenmeyen hassas zamanlama için monotonik saatle birlikte Process.clock_gettime kullanın.
- NTP ayarlamalarından etkilenmez
- Yerleşik seçenekler arasındaki en doğru seçenektir
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
200_000.times { |i| i * i }
finish = Process.clock_gettime(Process::CLOCK_MONOTONIC)
puts "Elapsed: #{(finish - start).round(4)}s"İki Yaklaşımı Karşılaştırma
Kıyaslamalar, alternatifleri karşılaştırırken çok işe yarar. Her ikisini de aynı yük altında çalıştırın.
- Ölçülebilir olması için girdi boyutunu yeterince büyük tutun
- Gürültüyü azaltmak için yineleyin
require 'benchmark'
arr = (1..100_000).to_a
Benchmark.bm(8) do |x|
x.report('map:') { arr.map { |n| n * 2 } }
x.report('each:') { r = []; arr.each { |n| r << n * 2 } }
endMikro Kıyaslamalara Dikkat
Küçük kıyaslamalar yanıltıcı olabilir.
- Tam zamanında derleme ve önbellekler gerçek iş yüklerini yansıtmayabilir
- Çöp toplayıcı ölçümün ortasında çalışabilir
- Gerçekçi veri boyutlarını ölçün
require 'benchmark'
# Too small to be meaningful
t = Benchmark.realtime { 10.times { |i| i + 1 } }
puts "Misleadingly tiny: #{t}s"Saniyedeki Yineleme Sayısı
Çoğu zaman işlem hacmini, yani saniyedeki işlem sayısını bilmek istersiniz. benchmark-ips paketi bunu raporlar; ancak değeri elle yaklaşık olarak hesaplayabilirsiniz.
- Sabit bir zaman aralığındaki yinelemeleri sayın
- Daha yüksek saniyedeki yineleme sayısı daha hızlıdır
deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + 0.2
count = 0
while Process.clock_gettime(Process::CLOCK_MONOTONIC) < deadline
count += 1
'hello'.upcase
end
puts "Iterations in 0.2s: #{count}"Çöp Toplayıcıyı Denetleme
Çöp toplayıcı sonuçları çarpıtabilir. Daha istikrarlı değerler elde etmek için onu geçici olarak devre dışı bırakabilirsiniz.
- Öncesinde
GC.disable, sonrasındaGC.enablekullanın - Bellek kullanımının artmasını önlemek için dikkatli kullanın
require 'benchmark'
GC.disable
t = Benchmark.realtime { 100_000.times { |i| i.to_s } }
GC.enable
puts "Without GC: #{t.round(4)}s"Birden Çok Çalıştırmanın Ortalamasını Alma
Değişkenliği yumuşatmak için bir kıyaslamayı birkaç kez çalıştırıp ortalamasını alın.
- Gerekirse en yavaş aykırı değeri çıkarın
- Kararlılık için medyanı raporlayın
require 'benchmark'
times = 3.times.map do
Benchmark.realtime { (1..50_000).map { |n| n * n } }
end
avg = times.sum / times.size
puts "Average: #{avg.round(4)}s"Hızlı Kontrol
Kıyaslama bilginizi sınayın.
Özet
Performansı ölçmeyi öğrendiniz:
Benchmarkmodülü kodun süresini doğru biçimde ölçerrealtime,measure,bmvebmbmfarklı gereksinimlere hizmet eder- Hassas zamanlama için monotonik saati kullanın
- Yanıltıcı mikro kıyaslamalardan kaçının ve çöp toplayıcıyı hesaba katın
- Gürültüyü azaltmak için birden çok çalıştırmanın ortalamasını alın
Sonraki bölümde özel amaçlı profil çıkarma araçlarını kullanacaksınız.
Sıkça Sorulan Sorular
“Performans Ölçme” dersi ücretsiz mi?
Evet — “Performans Ölçme” 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 Ruby Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Ruby Academy kursu toplamda 4 dersten oluşur.
“Performans Ölçme” dersinde ne öğreneceğim?
Benchmark modülü Ruby 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.
Ruby Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Ruby 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.
“Performans Ölçme” 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 Ruby Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Ruby 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
- Performans Ölçme
- Profil Oluşturma Araçları
- Bellek En İyileştirme
- Yaygın Darboğazlar