Benchmarking Basics
Benchmark asoslari
Test kodning to'g'riligini, benchmark esa kodning tezligini o'lchaydi. Go'da benchmark yozish testga juda o'xshaydi, faqat Test o'rniga Benchmark va *testing.T o'rniga *testing.B ishlatiladi.
package main
import "testing"
func Sum(nums []int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
func BenchmarkSum(b *testing.B) {
nums := []int{1, 2, 3, 4, 5}
for i := 0; i < b.N; i++ {
Sum(nums)
}
}b.N — Go'ning o'zi avtomatik tanlaydigan takrorlar soni: dastlab kichik sondan boshlanib, ishonchli o'lchov olish uchun kerak bo'lguncha oshirib boriladi (masalan bir necha ming yoki million marta). Sikl ichida Sum(nums)ni aynan b.N marta chaqirib, Go har bir chaqiruv o'rtacha qancha vaqt (ns/op — operatsiyaga nanosekund) va xotira (B/op, allocs/op) sarflaganini hisoblaydi.
Benchmark natijasi mashinadan mashinaga farq qiladi (protsessor tezligiga bog'liq), shuning uchun ular "to'g'ri/noto'g'ri" emas, balki taqqoslash uchun ishlatiladi: masalan ikki xil algoritmni yozib, qaysi biri tezroq ekanini o'lchash uchun. Real loyihada bunday benchmark go test -bench=. buyrug'i bilan ishga tushiriladi (bizning interaktiv muhitimiz esa benchmark vaqtini o'lchay olmaydi, shuning uchun bu darsda faqat kod ko'rib chiqiladi).
Key Takeaway
Key Takeaway:
BenchmarkXxx(b *testing.B) va b.N — kod tezligini o'lchash uchun ishlatiladi; natijalar ikki yechimni taqqoslash uchun foydali, mutlaq "to'g'ri qiymat" emas.
NEXT UP
Advanced Benchmarking