Размещение нескольких заданий в фоновом режиме - это хороший способ использования нескольких ядер одной машины. parallel
однако позволяет распределять задания по нескольким серверам вашей сети. От man parallel
:
GNUrallel - это инструмент оболочки для параллельного выполнения заданий с использованием одного или нескольких компьютеров . Типичным вводом является список файлов, список хостов , список пользователей, список URL-адресов или список таблиц.
Даже при работе на одном компьютере parallel
дает гораздо больший контроль над распараллеливанием ваших заданий. Возьмите этот пример со man
страницы:
To convert *.wav to *.mp3 using LAME running one process per CPU core
run:
parallel lame {} -o {.}.mp3 ::: *.wav
Хорошо, вы могли бы сделать то же самое с
for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done
Однако это длиннее и громоздче, и, что более важно, запустит столько заданий, сколько есть .wav
файлов. Если вы запустите это на нескольких тысячах файлов, это может поставить нормальный ноутбук на колени. parallel
с другой стороны, запустит одну работу на ядро процессора и будет держать все в порядке.
По сути, parallel
предлагает вам возможность точно настроить, как выполняются ваши задания и сколько доступных ресурсов они должны использовать. Если вы действительно хотите увидеть всю мощь этого инструмента, изучите его руководство или, по крайней мере, примеры, которые он предлагает.
Простое фоновое изображение действительно не соответствует уровню сложности, который можно сравнить с параллельным. Что касается того, как parallel
отличается от xargs
толпы GNU дать хороший разбивка здесь . Некоторые из наиболее важных моментов:
- xargs плохо работает со специальными символами (такими как пробел, 'и ").
- xargs может выполнять заданное количество заданий параллельно, но не поддерживает параллельное выполнение заданий количества процессоров.
- xargs не поддерживает группировку вывода, поэтому вывод может выполняться вместе, например, первая половина строки принадлежит одному процессу, а последняя половина строки - другому процессу.
- xargs не поддерживает сохранение порядка вывода, поэтому при параллельном выполнении заданий с использованием xargs вывод второго задания не может быть отложен до завершения первого задания.
- xargs не поддерживает запуск заданий на удаленных компьютерах.
- xargs не поддерживает замену контекста, поэтому вам придется создавать аргументы.
parallel
синтаксис, еще один новый бренд клавиатуры-faceroll для запоминания. Но я думаю, что автоматическая балансировка между ядрами / заданиями того стоит?sem
что является частью пакета GNU Parallel. Это может лучше соответствовать вашим требованиям синтаксиса.parallel
это мощнееxargs
, но это сравнение довольно предвзятым. Например,xargs
поддерживает строки с нулевым символом в конце в качестве входных данных, чтобы избежать проблем с пробелами и кавычками, а также может-d
эмулироватьparallel
(даже упомянутое в сравнении!).xargs -I
достаточно замены контекста для большинства простых случаев, и я обычно знаю количество ядер на машине. У меня никогда не возникало проблем с разгруппированным выводом.