GNU parallel vs & (Я имею в виду фон) против xargs -P

Я смущен различием или преимуществом (если есть) запуска набора задач в сценарии .sh, используя GNU parallel

например. Ответ Оле Танге :

parallel ./pngout -s0 {} R{} ::: *.png

вместо того, чтобы прокручивать их, помещая их в фоновый рисунок &.

например. ответ frostschutz :

#copied from the link for illustration
for stuff in things
do
( something
  with
  stuff ) &
done
wait # for all the something with stuff

Короче говоря, они просто синтаксически или практически разные? И если практически разные, когда я должен использовать каждый?

34 голоса | спросил Stephen Henderson 12 ThuEurope/Moscow2013-12-12T04:08:31+04:00Europe/Moscow12bEurope/MoscowThu, 12 Dec 2013 04:08:31 +0400 2013, 04:08:31

1 ответ


39

Помещение нескольких заданий в фоновом режиме - хороший способ использования нескольких ядер одной машины. parallel, однако, позволяет распространять задания на нескольких серверах вашей сети. Из man parallel:

  

GNU parallel - это инструмент оболочки для параллельного выполнения заданий   один или более компьютеров . Типичный ввод - это список          файлы, список хостов , список пользователей, список 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 не поддерживает замену контекста, поэтому вам придется создавать аргументы.
ответил terdon 12 ThuEurope/Moscow2013-12-12T08:09:42+04:00Europe/Moscow12bEurope/MoscowThu, 12 Dec 2013 08:09:42 +0400 2013, 08:09:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132