Выбор ответа Senior Тесты, бенчмарки и модули обновлено

testing.B.Loop в Go 1.24

Вопрос

Чем for b.Loop() { ... } (Go 1.24) лучше классического for i := 0; i < b.N; i++?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Setup идёт один раз вне замера, вызовы не выкидываются. С b.N функция бенчмарка вызывается несколько раз с растущим N, и дорогой setup повторяется, если не вызвать b.ResetTimer. b.Loop сам управляет таймером, а аргументы и результаты вызовов в цикле удерживаются живыми, чтобы оптимизатор не…

Варианты ответа

  1. b.Loop запускает итерации параллельно на всех P
  2. Setup идёт один раз вне замера, вызовы не выкидываютсяправильный ответ
  3. b.Loop автоматически сравнивает с прошлым запуском
  4. Разницы нет, это синтаксический сахар над b.N

Разбор

С b.N функция бенчмарка вызывается несколько раз с растущим N, и дорогой setup повторяется, если не вызвать b.ResetTimer. b.Loop сам управляет таймером, а аргументы и результаты вызовов в цикле удерживаются живыми, чтобы оптимизатор не удалил «бесполезный» вызов. Параллельности он не добавляет (для этого b.RunParallel), и ни с чем не сравнивает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.