Для удобства пользователя есть одна основная функция Run(), которая внутри просто последовательно вызывает все другие, более мелкие функции, чтобы можно было использовать только одну её, вместо того, чтобы по-отдельности вызывать каждую маленькую функцию.
Эта основная Run() функция выполняет полностью всю работу, необходимую от неё. То есть, конкретно в моем случае, создаёт докер контейнер, выполняет его, собирает с него логи и удаляет этот контейнер.
Отдельные функции пользователю запускать именно в горутинах будет бессмысленно, так как важен порядок их выполнения. То есть с горутинами получится так, что контейнер может быть сначала удалён, только потом создан и никогда не остановлен, что, очевидно, не то, что от программы ожидается.
Эта основная функция Run() делает всё, что нужно и в правильном порядке.
Вопрос в том, насколько безопасно с точки зрения последовательности выполнения кода запускать Run() в горутине? Гарантированы ли последовательные вызовы всех функций внутри Run()? Правильно ли я понимаю, что concurrency в данном случае затронет только выполнение нескольких запусков Run(), но не того, что внутри них? То есть можно ли в цикле запустить несколько горутин Run() и быть спокойным, что всё выполнится правильно?
То есть, если обобщить всё, то вопрос сводится к: "если функция запущена в горутине, то в таком же ли порядке выполняются действия, как и при запуске без горутины?" Да, в таком же порядке. Главное - это следить за доступом к каким-то общим ресурсам
Понятно. Спасибо большое!
Обсуждают сегодня