GNU parallelo vs & (intendo sfondo) vs xargs -P


40

Sono confuso circa la differenza o il vantaggio (se presente) di eseguire una serie di attività in uno .shscript utilizzandoGNU parallel

Ad esempio la risposta di Ole Tange :

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

piuttosto che dire attraversandoli in sequenza mettendoli in secondo piano &.

Ad esempio la risposta di frostschutz :

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

In breve, sono solo sintatticamente o praticamente diversi? E se praticamente diverso quando dovrei usarli?

Risposte:


46

Mettere più lavori in background è un buon modo di usare più core di una singola macchina. paralleltuttavia, consente di distribuire i lavori su più server della rete. Da man parallel:

GNU parallel è uno strumento shell per eseguire lavori in parallelo usando uno o più computer . L'input tipico è un elenco di file, un elenco di host , un elenco di utenti, un elenco di URL o un elenco di tabelle.

Anche quando si esegue su un singolo computer, paralleloffre un controllo molto maggiore su come i lavori vengono parallelizzati. Prendi questo esempio dalla manpagina:

   To convert *.wav to *.mp3 using LAME running one process per CPU core
   run:

   parallel lame {} -o {.}.mp3 ::: *.wav

OK, potresti fare lo stesso con

   for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done

Tuttavia, questo è più lungo e più ingombrante e, soprattutto, avvia tutti i lavori quanti sono i .wavfile. Se lo esegui su alcune migliaia di file, è probabile che metta in ginocchio un normale laptop. paralleld'altra parte, avvierà un lavoro per core della CPU e manterrà tutto in ordine.

Fondamentalmente, parallelti offre la possibilità di mettere a punto il modo in cui i tuoi lavori vengono eseguiti e quante risorse disponibili dovrebbero usare. Se vuoi davvero vedere la potenza di questo strumento, consulta il suo manuale o, almeno, gli esempi che offre.

Il semplice background non ha davvero nulla di simile al livello di sofisticazione da paragonare al parallelo. Quanto a quanto paralleldifferisce xargs, la folla GNU dà una bella ripartizione qui . Alcuni dei punti più salienti sono:

  • xargs si occupa male di caratteri speciali (come spazio, 'e ").
  • xargs può eseguire un determinato numero di lavori in parallelo, ma non ha supporto per l'esecuzione di lavori di numero di core in parallelo.
  • xargs non supporta il raggruppamento dell'output, pertanto l'output può essere eseguito insieme, ad esempio la prima metà di una riga proviene da un processo e l'ultima metà della riga proviene da un altro processo.
  • xargs non ha supporto per mantenere l'ordine dell'output, quindi se si eseguono lavori in parallelo usando xargs l'output del secondo lavoro non può essere posticipato fino a quando non viene fatto il primo lavoro.
  • xargs non ha supporto per l'esecuzione di lavori su computer remoti.
  • xargs non ha supporto per la sostituzione del contesto, quindi dovrai creare gli argomenti.

1
Questa è una buona risposta, grazie. In un certo senso conferma ciò che ho indovinato. Odio la parallelsintassi, l'ennesimo nuovo marchio di tastierini da tastiera da memorizzare. Ma credo che valga la pena il bilanciamento automatico tra core / lavori ...?
Stephen Henderson,

3
Dai un'occhiata a semquale fa parte del pacchetto GNU Parallel. Ciò potrebbe soddisfare meglio i requisiti della sintassi.
Ole Tange,

1
@OleTange thx, good call
Stephen Henderson,

> xargs non ha supporto per la sostituzione del contesto, quindi dovrai creare gli argomenti. --- Cosa significa questo? Non è xargs -I%
raine

4
È vero che parallelè più potente di xargs, ma quel confronto è piuttosto parziale. Ad esempio, xargssupporta stringhe con terminazione null come input per evitare problemi con spazi e virgolette e può anche -demulare parallel(anche menzionato nel confronto!). xargs -Iè una sostituzione del contesto sufficiente per la maggior parte dei casi semplici e di solito conosco il numero di core sulla macchina. Non ho mai avuto problemi con l'output non raggruppato.
Sam Brightman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.