Чтение результатов
Первый бенчмарк валидации был готов, и Миша читал его строку вместе с Аней: три числа отвечали на разные вопросы. Сравнение вариантов на одной машине показало: аллокации часто важнее наносекунд.
в строке бенчмарка три числа — ns/op, B/op и allocs/op; для кода, который дёргает GC, аллокации часто важнее времени.
Строка результата
BenchmarkValidateEmails-8 500000 2450 ns/op 512 B/op 2 allocs/op
-8— значение GOMAXPROCS (число P); обычно совпадает с числом ядер, но в контейнере с ограниченным CPU может быть меньше.500000— сколько раз функция отработала.ns/op— наносекунд на операцию.B/op— байтов аллокаций на операцию.allocs/op— число аллокаций на операцию.
B/op и allocs/op считают только аллокации в куче: стековые в замер не входят, поэтому трактовать B/op как полный объём памяти операции нельзя.
Для кода, который дёргает GC, allocs/op часто важнее времени: меньше аллокаций — меньше работы сборщика (связь с), даже если наносекунды почти не изменились.
Сравнение на одной машине
Бенчмарк измеряет относительную скорость, а не абсолютную. Цифры ns/op имеют смысл только при сравнении двух вариантов на одной машине. Гоняешь бенчмарк, меняешь реализацию, гоняешь снова — разница и есть ответ. Переносить числа между машинами бессмысленно.
Классическое сравнение
Классика из конкурентных задач — счётчик на мьютексе, атомике и канале: три бенчмарка, одинаковый вход, разная синхронизация. Сравнение покажет то, о чём говорил: для простого инкремента мьютекс избыточен, атомик заметно дешевле, а канал — ещё дороже, потому что его операции чаще паркуют горутины через планировщик (правда, отправка в буфер со свободным местом может пройти и без парковки).
Вы узнаете:
- как
-benchtimeи-countотсекают выбросы - почему
-8и как число ядер влияет
Проверьте себя
Что означают ns/op, B/op и allocs/op?
Можно ли переносить ns/op между разными машинами?
Для кода, который дёргает GC, что часто важнее времени?
правильных ответов
ns/op — время, B/op и allocs/op — аллокации в куче. Сравнивай на одной машине; для GC-чувствительного кода смотри allocs/op.
10 000 ₽ · 60 минут · онлайн