GNU paralel vs & (arka plan demek) vs xargs -P


39

.shKullanarak bir komut dosyasında bir dizi görevi çalıştırmanın (varsa) farkı veya avantajı hakkında kafam karıştıGNU parallel

Örneğin Ole Tange'nin cevabı:

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

Onları içine döngü demek yerine onları arka planda koyarak &.

Örneğin frostschutz 'ın cevabı:

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

Kısacası, sadece sözdizimsel mi yoksa pratik olarak farklı mı? Ve eğer pratik olarak farklıysa, her birini ne zaman kullanmalıyım?

Yanıtlar:


46

Arkaplanda birden fazla iş koymak, tek bir makinenin çoklu çekirdeklerini kullanmanın iyi bir yoludur. parallelancak işleri ağınızdaki birden çok sunucuya yaymanıza olanak tanır. Kimden man parallel:

GNU paralel, işleri bir veya daha fazla bilgisayar kullanarak paralel olarak yürütmek için kullanılan bir kabuk aracıdır . Tipik girdi bir dosya listesi, ana bilgisayar listesi, kullanıcı listesi, URL listesi veya tablo listesidir.

Tek bir bilgisayarda çalışırken bile parallel, işlerinizin nasıl paralel hale getirileceği konusunda çok daha fazla kontrol sağlar. Bu örneği mansayfadan alın :

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

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

Tamam, aynısını yapabilirsin.

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

Ancak, bu daha uzun ve daha zahmetlidir ve daha da önemlisi, .wavdosyalar kadar çok işi başlatabilir . Bunu birkaç bin dosya üzerinde çalıştırırsanız, dizlerine normal bir dizüstü bilgisayar getirmesi olasıdır. parallelÖte yandan, CPU çekirdeği başına bir iş başlatacak ve her şeyi güzel ve düzenli tutacak.

Temel olarak, parallelsize işlerinizin nasıl yürüdüğünü ve ne kadar kullanılabilir kaynak kullanmaları gerektiğini ayarlama yeteneği sunar. Bu aracın gücünü gerçekten görmek istiyorsanız, el kitabından veya en azından sunduğu örneklerden yararlanın.

Basit bir arka planlamanın, gerçekten de paralel ile karşılaştırılacak karmaşıklık seviyesine yakın hiçbir yeri yoktur. Ne kadar parallelfarklı olduğuna gelince xargs, GNU kalabalığı burada güzel bir arıza veriyor . Daha göze çarpan noktalardan bazıları:

  • xargs, özel karakterlerle (boşluk, 've "gibi) kötü bir şekilde ilgilenir.
  • xargs, belirli sayıda işi paralel olarak çalıştırabilir, ancak cpu-çekirdek sayısı işlerini paralel olarak çalıştırma desteği yoktur.
  • xargs çıktının gruplandırılması için bir desteğe sahip değildir, bu nedenle çıktı birlikte çalışabilir, örneğin bir çizginin ilk yarısı bir işlemden ve çizginin son yarısı başka bir işlemden gelir.
  • xargs çıktının sırasını koruma konusunda bir desteğe sahip değildir; bu nedenle, xargs kullanarak işleri paralel olarak çalıştırıyorsanız, ikinci işin çıktısı ilk iş tamamlanıncaya kadar ertelenemez.
  • xargs, uzak bilgisayarlarda işleri çalıştırmak için herhangi bir desteği yoktur.
  • xargs, bağlam değiştirme için herhangi bir desteğe sahip olmadığı için, argümanları oluşturmanız gerekecek.

1
Bu iyi bir cevap, teşekkürler. Tahmin ettiğim şeyi onaylıyor. parallelSözdiziminden, ezberlemek için yeni bir klavye-faceroll markasından nefret ediyorum . Ama ben çekirdek / işler arasında otomatik dengeleme buna değer olduğunu tahmin ediyorum ...?
Stephen Henderson,

3
semGNU Parallel paketinin bir parçası olan bir göz atın . Bu, sözdizimi gereksinimlerinize daha uygun olabilir.
Ole Tange

1
@OleTange thx, iyi çağrı
Stephen Henderson

> xargs bağlam değiştirme için destek vermez, bu yüzden argümanları yaratman gerekir. --- Ne anlama geliyor? Öyle değil mi? -I%
yağmur 11

4
Bundan paralleldaha güçlü olduğu doğrudur xargs, ancak bu karşılaştırma oldukça önyargılıdır. Örneğin, xargsboşluk ve tırnak sorunlarından kaçınmak için boş sonlandırılmış dizeleri girdi olarak destekler ve aynı zamanda -dtaklit edebilir parallel(karşılaştırmada bile belirtilebilir!). xargs -Içoğu basit durum için yeterli bağlam değişimidir ve genellikle makinedeki çekirdek sayısını biliyorum. Asılsız çıktıda bir sorun yaşamadım.
Sam Brightman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.