Выбор ответа 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 сам управляет таймером, а аргументы и результаты вызовов в цикле удерживаются живыми, чтобы оптимизатор не…
Варианты ответа
- b.Loop запускает итерации параллельно на всех P
- Setup идёт один раз вне замера, вызовы не выкидываютсяправильный ответ
- b.Loop автоматически сравнивает с прошлым запуском
- Разницы нет, это синтаксический сахар над b.N
Разбор
С b.N функция бенчмарка вызывается несколько раз с растущим N, и дорогой setup повторяется, если не вызвать b.ResetTimer. b.Loop сам управляет таймером, а аргументы и результаты вызовов в цикле удерживаются живыми, чтобы оптимизатор не удалил «бесполезный» вызов. Параллельности он не добавляет (для этого b.RunParallel), и ни с чем не сравнивает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.