Параллелизм в Go тестах: все, что нужно знать о -p, -parallel и t.Parallel()

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Тонкая настройка параллелизма в тестах Go

В Go есть три способа управления параллельностью тестов:

  • Флаг -p

  • Флаг -parallel

  • Вызов функции t.Parallel()

Но многие ли понимают, как они работают? И зачем нам все три?

Оказывается:

  • -p управляет числом тестовых пакетов, выполняемых параллельно.

  • -parallel определяет количество тестовых функций внутри одного пакета, выполняемых параллельно.

  • t.Parallel() помечает тестовую функцию, разрешая Go выполнять её параллельно с другими тестами в том же пакете.

Пример 1

Допустим, у нас есть 999 пакетов, в каждом из которых 999 тестовых функций, но ни одна из них не использует t.Parallel(). Что произойдет?

Ответ: N тестовых пакетов будет выполняться параллельно (N равно количеству ядер CPU), но внутри каждого пакета тесты будут запускаться последовательно. В итоге одновременно выполняются N тестов.

Пример 2

Теперь тот же сценарий, но добавим -p 1. Что изменится?

Ответ: полностью последовательное выполнение тестов.

Пример 3

А теперь добавим t.Parallel(), оставив -p 1. Что будет?

Ответ: t.Parallel() в сочетании с -p 1 означает "в каждый момент времени выполняется только один пакет, но внутри него N тестов могут выполняться параллельно", где N — количество ядер CPU.

Вывод

Максимальный контроль достигается комбинацией всех трёх параметров:
-p X -parallel Y + t.Parallel().

Но будьте осторожны с состоянием в тестах (как всегда, state — корень всех проблем, но без него не обойтись).


Язык программирования Neva

Разрабатываете на Go? Обратите внимание на Nevalang — экспериментальный язык программирования, построенный на основе Go, который решает некоторые его проблемы: гонки данных, nil pointer dereference и многое другое. В 2025 году он получит визуальный редактор, Rust-подобные enum'ы и многое другое. В перспективе Neva и Go смогут вызывать друг друга.

Neva
Neva

Заинтересовало? Поставьте ⭐ и присоединяйтесь к нашему сообществу. Нам нужны разработчики (не только gophers!) для тестирования и улучшения языка. Давайте вместе менять программирование! Go — классный, но можно сделать лучше:

  • Discord

  • Telegram

  • Reddit

  • Twitter

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Оцените статью
0% Уже знал и использовал все 30
0% Узнал что-то новое0
0% Вообще ничего не знал об этих вещах0
Никто еще не голосовал. Воздержавшихся нет.
Источник: https://habr.com/ru/articles/882222/


Интересные статьи

Интересные статьи

Девять букв, три слога, шесть согласных... Каждое третье сентября он переворачивается и дарит популярность шлягеру Шуфутинского. Он вовремя напоминает нам о поздравлении близких (и не очень) людей. По...
На форуме разработчиков Битрикс был опубликована запись о злоумышленниках, которые добавляют скрипты на страницы сайтов. Рекомендации, как переиграть негодяев, ниже.
FizzBuzz это известная задачка, шутливо или не очень задаваемая на собеседованиях, существует множество вариантов реализации даже для такой простой игры. Существует даже шедевры вроде...
Принято считать, что персонализация в интернете это магия, которая создается сотнями серверов на основе БигДата и сложного семантического анализа контента.
Как широко известно, с 1 января 2017 года наступает три важных события в жизни интернет-магазинов.