Mettere più lavori in background è un buon modo di usare più core di una singola macchina. parallel
tuttavia, 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, parallel
offre un controllo molto maggiore su come i lavori vengono parallelizzati. Prendi questo esempio dalla 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, questo è più lungo e più ingombrante e, soprattutto, avvia tutti i lavori quanti sono i .wav
file. Se lo esegui su alcune 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 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 parallel
differisce 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.
parallel
sintassi, l'ennesimo nuovo marchio di tastierini da tastiera da memorizzare. Ma credo che valga la pena il bilanciamento automatico tra core / lavori ...?