Многопоточность в 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 команды справа.