сделать петлю параллельной

Как сделать этот цикл параллельным:

for a in $(seq 1 3) do for b in 0.1 0.2 do echo process with a=$a and b=$b & done done 

это параллельно или нет? На самом деле, я хочу запустить echo process with a=$a and b=$b параллельно для каждой комбинации значений a и b Вот результат запуска указанной оболочки:

  • Как получить информацию о слове, размере адреса, размере адресной шины, размере шины данных и размере шины?
  • Какова команда поиска файла jar в определенной папке?
  • Какие приложения для редактирования видео доступны в Linux?
  • Права клонирования и разрешения от другого файла?
  • Перезагрузите USB (ehci) в Fedora 14
  • Получить файлы с именем, содержащим значение даты, меньшее или равное заданной дате ввода
  •  process with a=1 and b=0.1 process with a=2 and b=0.2 process with a=2 and b=0.1 process with a=3 and b=0.2 process with a=3 and b=0.1 process with a=1 and b=0.2 

    Благодарю.

  • Преобразование MAC-адреса в локальный адрес ссылки с помощью bash
  • Самый безопасный способ добавления / расширения раздела на Linux
  • Черный экран при возобновлении от приостановки до ОЗУ
  • Как ограничить скорость ftp
  • Бенчмаркинг Apache с использованием ab
  • Являются ли модули ядра конкретными для Linux или общего механизма?
  • 3 Solutions collect form web for “сделать петлю параллельной”

    С GNU Parallel это выглядит так:

     parallel echo process with a={1} and b={2} ::: 1 2 3 ::: 0.1 0.2 seq 1 3 | parallel echo process with a={1} and b={2} :::: - ::: 0.1 parallel echo process with a={1} and b={2} :::: <(seq 1 3) ::: 0.1 0.2 

    Я предполагаю, что echo является просто примером, поскольку параллелизующее echo вряд ли стоит того.

    Если вещь, которую вы запускаете во внутреннем цикле, занимает какое-то время ( echo очень быстро запускается), тогда, когда петли запустили все асинхронные процессы, они будут работать одновременно .

    Сами петли не являются «параллельными».

    Это должно быть комментарий, но комментарии слишком малы.

    Убедитесь, что ваше решение работает для вывода произвольных размеров и не смешивает выходные данные из одного задания с другим. Вот небольшой пример, чтобы проверить, что:

     #!/bin/bash # stress test of parallelizing programs longline() { # print one big line with 'a's followed by 'b's followed by 'c's perl -e 'print "@ARGV ", map { "$_"x10000000 } (a..c)' "$@" echo } echo "Run testprogram in parallel" for a in $(seq 1 3) do for b in 0.1 0.2 do longline $a $b & done done | # use 'tr' to compress many 'a's into a single 'a' # if the output is not 'abc' on every line, lines have been mixed tr -cs '@' echo "Run testprogram in serial" for a in $(seq 1 3) do for b in 0.1 0.2 do longline $a $b done done | tr -cs '@' echo "Compare with GNU Parallel" export -f longline parallel -kj0 longline :::: <(seq 1 3) ::: 0.1 0.2 | tr -cs '@' 
    Linux и Unix - лучшая ОС в мире.