GNU समानांतर बनाम और (मेरा मतलब है पृष्ठभूमि) बनाम xargs -P


40

मैं एक .shस्क्रिप्ट का उपयोग करके कार्यों के एक सेट को चलाने के अंतर या लाभ (यदि कोई हो) के बारे में उलझन में हूंGNU parallel

जैसे ओले तांगे का जवाब:

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

कहने के बजाय उनके माध्यम से उन्हें पृष्ठभूमि में डालकर पाशन करना &

उदाहरण के लिए frostschutz के जवाब:

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

संक्षेप में, वे सिर्फ वाक्यात्मक या व्यावहारिक रूप से अलग हैं? और अगर व्यावहारिक रूप से अलग हो तो मुझे प्रत्येक का उपयोग कब करना चाहिए?

जवाबों:


46

एक ही मशीन के कई कोर का उपयोग करने के लिए पृष्ठभूमि में कई काम करना एक अच्छा तरीका है। parallelहालाँकि, आपको अपने नेटवर्क के कई सर्वरों पर नौकरी फैलाने की अनुमति देता है। से man parallel:

जीएनयू समानांतर एक या अधिक कंप्यूटरों का उपयोग करके समानांतर में नौकरियों को निष्पादित करने के लिए एक शेल उपकरण है । विशिष्ट इनपुट फ़ाइलों की एक सूची है, मेजबानों की एक सूची, उपयोगकर्ताओं की एक सूची, URL की सूची या तालिकाओं की एक सूची है।

यहां तक ​​कि जब एक ही कंप्यूटर पर चल रहा है, parallelतो आपको अपनी नौकरी को समानांतर रखने के तरीके पर अधिक नियंत्रण देता है। इस उदाहरण को manपृष्ठ से लें :

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

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

ठीक है, आप भी ऐसा ही कर सकते हैं

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

हालांकि, यह अधिक लंबा और अधिक बोझिल है और, इससे भी महत्वपूर्ण बात यह है कि जितनी भी .wavफाइलें होंगी, उतने ही नौकरियों में लॉन्च होंगी । यदि आप इसे कुछ हज़ार फाइलों पर चलाते हैं, तो इसके घुटनों पर एक सामान्य लैपटॉप लाने की संभावना है। parallelदूसरी ओर, सीपीयू कोर के अनुसार एक नौकरी शुरू करेगा और सब कुछ अच्छा और सुव्यवस्थित रखेगा।

मूल रूप से, parallelआपको ठीक धुन करने की क्षमता प्रदान करता है कि आपकी नौकरियां कैसे चलती हैं और उन्हें कितने उपलब्ध संसाधनों का उपयोग करना चाहिए। यदि आप वास्तव में इस उपकरण की शक्ति को देखना चाहते हैं, तो इसके मैनुअल के माध्यम से या, बहुत कम से कम, इसके उदाहरण प्रस्तुत करते हैं।

समानांतर की तुलना में सरल पृष्ठभूमि वास्तव में परिष्कार के स्तर के पास कहीं नहीं है। जैसा कि इस बात से parallelभिन्न है कि xargs, GNU भीड़ यहाँ एक अच्छा ब्रेकडाउन देती है । कुछ और अधिक मुख्य बिंदु हैं:

  • xargs विशेष पात्रों (जैसे अंतरिक्ष, 'और ") के साथ बुरी तरह से व्यवहार करता है।
  • xargs दी गई संख्या को समानांतर रूप से चला सकता है, लेकिन समानांतर में नंबर-ऑफ-सीपीयू-कोर जॉब्स चलाने के लिए कोई समर्थन नहीं है।
  • xargs के पास आउटपुट को समूहीकृत करने के लिए कोई समर्थन नहीं है, इसलिए आउटपुट एक साथ चल सकता है, जैसे कि लाइन का पहला आधा भाग एक प्रक्रिया से है और लाइन का अंतिम आधा भाग दूसरी प्रक्रिया से है।
  • आउटपुट के क्रम को बनाए रखने के लिए xargs का कोई समर्थन नहीं है, इसलिए यदि xargs का उपयोग करके समानांतर में कार्य चलाना दूसरी नौकरी का आउटपुट तब तक स्थगित नहीं किया जा सकता है जब तक कि पहली नौकरी नहीं की जाती है।
  • दूरस्थ कंप्यूटर पर जॉब चलाने के लिए xargs का कोई समर्थन नहीं है।
  • xargs के पास संदर्भ प्रतिस्थापन के लिए कोई समर्थन नहीं है, इसलिए आपको तर्क बनाने होंगे।

1
यह एक अच्छा जवाब है, thx। यह पुष्टि करता है कि मैंने क्या अनुमान लगाया था। मुझे parallelवाक्य रचना से नफरत है , फिर भी याद रखने के लिए कीबोर्ड-फैरोल का एक और नया ब्रांड। लेकिन मुझे लगता है कि कोर / नौकरियों में ऑटो संतुलन इसके लायक है ...?
स्टीफन हेंडरसन

3
एक नज़र डालें semजो GNU समानांतर पैकेज का हिस्सा है। यह आपकी वाक्यविन्यास आवश्यकताओं के अनुरूप हो सकता है।
ओले तांगे

1
@OleTange thx, अच्छी कॉल
स्टीफन हेंडरसन

> xargs के पास संदर्भ बदलने के लिए कोई समर्थन नहीं है, इसलिए आपको तर्क बनाने होंगे। --- इसका क्या मतलब है? नहीं यह मैं% xargs है
Raine

4
यह सच है कि तुलना में parallelअधिक शक्तिशाली है xargs, लेकिन यह तुलना बल्कि पक्षपाती है। उदाहरण के लिए, xargsरिक्त स्थान और उद्धरण के साथ समस्याओं से बचने के लिए इनपुट के रूप में शून्य-समाप्त स्ट्रिंग्स का समर्थन करता है, और -dअनुकरण भी कर सकता है parallel(तुलना में भी उल्लेख किया गया है!)। xargs -Iअधिकांश सरल मामलों के लिए पर्याप्त संदर्भ प्रतिस्थापन है, और मैं आमतौर पर मशीन पर कोर की संख्या जानता हूं। मैंने कभी भी अनियंत्रित आउटपुट के साथ समस्या का अनुभव नहीं किया।
सैम ब्राइटमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.