Многопоточность в Bash

Я хотел бы ввести многопоточность в моей оболочке script.

У меня есть script, который вызывает функцию read_cfg() с разными аргументами. Каждый из этих вызовов функций является независимым.

Можно ли создавать эти вызовы функций (а не скрипты) параллельно. Пожалуйста, позвольте мне, как мы можем достичь этого.?

Ответ 1

Конечно, просто добавьте & после команды:

read_cfg cfgA &
read_cfg cfgB &
read_cfg cfgC &
wait

все эти задания будут выполняться одновременно в фоновом режиме. Опциональная команда wait будет ждать завершения всех заданий.

Каждая команда будет запускаться в отдельном процессе, поэтому технически это не "многопоточность", но я считаю, что она решает вашу проблему.

Ответ 2

Вы можете запускать несколько копий вашего script параллельно, каждая копия для разных входных данных, например. для обработки всех *.cfg файлов на 4 ядрах:

    ls *.cfg | xargs -P 4 -n 1 read_cfg.sh

Read_cfg.sh script принимает только один параметр (как принудительно -n)

Ответ 3

Bash Управление заданиями включает в себя несколько процессов, а не несколько потоков.

Вы можете выполнить команду в фоновом режиме с суффиксом &.

Вы можете дождаться завершения фоновой команды командой wait.

Вы можете выполнить несколько команд параллельно, разделив их на |. Это также обеспечивает механизм синхронизации, так как stdout команды слева от | подключается к команде stdin команды справа.