Как стать автором
Обновить

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

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров1.4K

Тонкая настройка параллелизма в тестах 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 — классный, но можно сделать лучше:

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Оцените статью
11.11% Уже знал и использовал все 31
22.22% Узнал что-то новое2
66.67% Вообще ничего не знал об этих вещах6
Проголосовали 9 пользователей. Воздержались 4 пользователя.
Теги:
Хабы:
Всего голосов 4: ↑2 и ↓20
Комментарии0

Публикации

Истории

Работа

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область