GNU/Linux >> Znalost Linux >  >> Linux

Gnu Parallel Vs &(i Mean Background) Vs Xargs -p?

Jsem zmatený rozdílem nebo výhodou (pokud existuje) spouštění sady úloh v .sh skript pomocí GNU parallel

Např. Odpověď Ole Tange:

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

spíše než říkat, že je cyklicky dáte na pozadí & .

Např. mrazuvzdorná odpověď:

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

Jsou zkrátka jen syntakticky nebo prakticky odlišné? A pokud se prakticky liší, kdy bych měl každý použít?

Přijatá odpověď:

Umístění více úloh na pozadí je dobrý způsob, jak využít více jader jednoho stroje. parallel umožňuje však rozložit úlohy na více serverů vaší sítě. Z man parallel :

GNU parallel je shellový nástroj pro paralelní provádění úloh pomocí
jednoho nebo více počítačů . Typickým vstupem je seznam
souborů, seznam hostitelů , seznam uživatelů, seznam adres URL nebo seznam tabulek.

I když běží na jednom počítači, parallel vám dává mnohem větší kontrolu nad tím, jak jsou vaše úlohy paralelizovány. Vezměte si tento příklad z man stránka:

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

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

OK, můžete udělat totéž s

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

To je však delší a těžkopádnější a co je důležitější, spustí tolik úloh, kolik je .wav soubory. Pokud to spustíte na několika tisících souborů, pravděpodobně to srazí normální notebook na kolena. parallel na druhou stranu spustí jednu úlohu na jádro CPU a udrží vše pěkné a uklizené.

V podstatě parallel vám nabízí možnost doladit, jak jsou vaše úlohy prováděny a kolik dostupných zdrojů by měly využívat. Pokud opravdu chcete vidět sílu tohoto nástroje, projděte si jeho manuál nebo alespoň příklady, které nabízí.

Jednoduché pozadí opravdu nemá úroveň sofistikovanosti, kterou by se dalo srovnávat s paralelou. Pokud jde o to, jak parallel se liší od xargs , GNU dav zde dává pěkný rozbor. Některé z nejvýraznějších bodů jsou:

  • xargs špatně pracuje se speciálními znaky (jako je mezera, ‘ a “).
  • xargs může spouštět daný počet úloh paralelně, ale nemá žádnou podporu pro paralelní spouštění úloh s počtem jader procesoru.
  • xargs nemá podporu pro seskupování výstupu, takže výstup může běžet společně, např. první polovina řádku je z jednoho procesu a poslední polovina řádku je z jiného procesu.
  • xargs nemá podporu pro zachování pořadí výstupu, takže pokud paralelně běží úlohy pomocí xargs, výstup druhé úlohy nemůže být odložen, dokud nebude dokončena první úloha.
  • xargs nepodporuje spouštění úloh na vzdálených počítačích.
  • xargs nemá podporu pro nahrazení kontextu, takže budete muset vytvořit argumenty.
Související:Je obvod paralelní RLC, pokud je mezi kondenzátorem a induktorem zdroj napětí?
Linux
  1. Odstraňování problémů s úlohami Cron

  2. Linux – Gnu Parallel Pair Argument with File Input Argumenty?

  3. Provádění zřetězených příkazů paralelně?

  1. Úvod do GNU Autotools

  2. Jak získat ID procesu na pozadí?

  3. GNU řazení podle velikosti písmen

  1. Jak spravovat úlohy na pozadí Linuxu pomocí příkazů fg a bg

  2. Bg, Fg, &, Ctrl-Z – 5 příkladů správy úloh na pozadí Unixu

  3. Jak zkopírovat soubor do více adresářů pomocí příkazu gnu cp