Параллельные процессы в Bash для ускорения задач

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

bashпараллелизмxargs

ℹ️ Один из недооцененных инструментов Bash — это возможность эффективно распараллеливать выполнение задач. Это особенно полезно при запуске множества однотипных операций, которые могут выполняться одновременно, например, запросы к API, загрузка файлов или запуск контейнеров.

🔥 Пример распараллеливания в Bash:

Вместо того, чтобы запускать команды последовательно, можно выполнять их параллельно, чтобы сэкономить время. Для этого часто используют комбинацию функций и команд &, wait или более продвинутые подходы с xargs.

#!/bin/bash

# Массив команд или задач
tasks=("команда1" "команда2" "команда3" "команда4")

# Запуск всех задач параллельно
for task in "${tasks[@]}"; do
  $task &  # запуск в фоновом режиме
done

# Ожидание завершения всех процессов
wait

ℹ️ Каждая команда в этом примере запускается параллельно, а wait гарантирует, что скрипт не завершится, пока все процессы не закончатся.

⚡️ Оптимизация с помощью xargs:

Если вам нужно передать список команд в параллельное выполнение, то использование xargs с флагом -P (количество параллельных процессов) значительно упростит задачу.

# Например, 5 параллельных скачиваний файлов
cat urls.txt | xargs -n 1 -P 5 wget

ℹ️ Этот код запускает 5 процессов wget одновременно, загружая файлы из списка urls.txt. Это может сильно ускорить процесс по сравнению с последовательной загрузкой.

✳️ Этот трюк поможет ускорить автоматизацию и более эффективно использовать ресурсы машины при выполнении однотипных задач.

tags: #полезно #linux #bash

🧭 @recura_tech

Скриншот терминала с подсветкой синтаксиса: пример Bash-скрипта для параллельного запуска задач (массив команд, &, wait) и упоминанием xargs.
Скриншот: пример Bash-скрипта с фоновыми процессами (&) и ожиданием через wait; дополнительно упомянут xargs для параллелизма.

Читайте так же