GNU/Linux >> Linux Esercitazione >  >> Linux

Gnu Parallel Vs &(mean Background) Vs Xargs -p?

Sono confuso sulla differenza o sul vantaggio (se presente) dell'esecuzione di una serie di attività in un .sh script usando GNU parallel

Per esempio. La risposta di Ole Tange:

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

piuttosto che dire di scorrerli in loop mettendoli in background & .

Per 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 differenti quando dovrei usarli?

Risposta accettata:

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

GNU parallel è uno strumento shell per l'esecuzione di lavori in parallelo utilizzando
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 è in esecuzione su un singolo computer, parallel ti offre un controllo molto maggiore sulla modalità di parallelizzazione dei tuoi lavori. Prendi questo esempio da man pagina:

   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, è più lungo e più ingombrante e, soprattutto, avvierà tanti lavori quanti sono .wav File. Se lo esegui su poche migliaia di file, è probabile che metta in ginocchio un normale laptop. parallel d'altra parte, avvierà un lavoro per core della CPU e manterrà tutto in ordine.

Fondamentalmente, parallel ti offre la possibilità di ottimizzare il modo in cui vengono eseguiti i tuoi lavori e la quantità di risorse disponibili che dovrebbero utilizzare. Se vuoi davvero vedere la potenza di questo strumento, consulta il suo manuale o, almeno, gli esempi che offre.

Lo sfondo semplice non ha davvero nulla di simile al livello di sofisticatezza da confrontare con il parallelo. Quanto a come parallel differisce da xargs , il pubblico di GNU fornisce una bella ripartizione qui. Alcuni dei punti più salienti sono:

  • xargs tratta male i caratteri speciali (come spazio, " e ").
  • xargs può eseguire un determinato numero di lavori in parallelo, ma non supporta l'esecuzione di lavori con numero di core di CPU in parallelo.
  • xargs non supporta il raggruppamento dell'output, pertanto l'output può essere eseguito insieme, ad es. la prima metà di una riga proviene da un processo e l'ultima metà della riga proviene da un altro processo.
  • xargs non supporta il mantenimento dell'ordine dell'output, quindi se si eseguono lavori in parallelo utilizzando xargs l'output del secondo lavoro non può essere posticipato fino al completamento del primo lavoro.
  • xargs non supporta l'esecuzione di lavori su computer remoti.
  • xargs non supporta la sostituzione del contesto, quindi dovrai creare gli argomenti.
Correlati:il circuito è un RLC parallelo se è presente una sorgente di tensione tra il condensatore e l'induttore?
Linux
  1. Risoluzione dei problemi di Cron Jobs

  2. Come copiare un file in più directory usando il comando gnu cp

  3. Cosa significa un punto dopo i bit di autorizzazione del file?

  4. Parallelo GNU:due parametri dall'array come parametro

  5. Xargs separati da una nuova riga

Comando Xargs in Linux

Una guida per principianti a Cron Jobs

Impara gli script Bash multi-threading con GNU Parallel

Processo Linux in background - Arresto nei lavori?

GNU ordina per distinzione tra maiuscole e minuscole

Parallelizza rsync usando GNU Parallel