समवर्ती प्रोग्रामिंग और समानांतर प्रोग्रामिंग के बीच अंतर क्या है?


346

समवर्ती प्रोग्रामिंग और समानांतर प्रोग्रामिंग के बीच अंतर क्या है? मैंने Google से पूछा लेकिन ऐसा कुछ नहीं मिला जिससे मुझे उस अंतर को समझने में मदद मिली। क्या आप मुझे दोनों के लिए एक उदाहरण दे सकते हैं?

अभी के लिए मुझे यह स्पष्टीकरण मिला: http://www.linux-mag.com/id/7411 - लेकिन "संगामिति कार्यक्रम की एक संपत्ति है" बनाम "समानांतर निष्पादन मशीन की एक संपत्ति है" मेरे लिए पर्याप्त नहीं है - फिर भी मैं नहीं कह सकता कि क्या है।


जवाबों:


310

यदि आप प्रोग्राम थ्रेड्स (समवर्ती प्रोग्रामिंग) का उपयोग कर रहे हैं, तो जरूरी नहीं कि इसे ऐसे (समानांतर निष्पादन) के रूप में निष्पादित किया जाए, क्योंकि यह इस बात पर निर्भर करता है कि मशीन कई थ्रेड्स को संभाल सकती है या नहीं।

यहाँ एक दृश्य उदाहरण है। गैर-थ्रेडेड मशीन पर थ्रेड्स :

        --  --  --
     /              \
>---- --  --  --  -- ---->>

एक थ्रेडेड मशीन पर धागे :

     ------
    /      \
>-------------->>

डैश निष्पादित कोड का प्रतिनिधित्व करते हैं। जैसा कि आप देख सकते हैं, वे दोनों अलग-अलग विभाजित और निष्पादित होते हैं, लेकिन थ्रेडेड मशीन एक साथ कई अलग-अलग टुकड़ों को निष्पादित कर सकती है।


34
समानांतर निष्पादन और समानांतर प्रोग्रामिंग एक ही बात नहीं है। जॉन हैरोप का उत्तर सही है। लेकिन ऐसा लगता है कि सवाल ही समानांतर निष्पादन और समानांतर प्रोग्रामिंग को भ्रमित करता है।
ब्लेज़ोरब्लेड

3
समानांतर में धागे को निष्पादित करने की क्षमता केवल मशीन से अधिक पर निर्भर करती है। उदाहरण के लिए, OCaml (और पायथन?) थ्रेड को समवर्ती रूप से निष्पादित करता है लेकिन कचरा कलेक्टर के लिए वैश्विक लॉक के कारण समानांतर में नहीं।
जॉन हैरोप

1
समानांतर प्रोग्रामिंग समवर्ती प्रोग्रामिंग का एक सबसेट नहीं है, इस ब्लॉग के अनुसार ; आप उत्तर देते हैं कि इस बात को ध्यान में नहीं रखते, आप इस कथन के बारे में क्या सोचते हैं?
केविन

1
@ केविन: मुझे लगता है कि "अधिक सामान्य" का अर्थ सुपरसेट है। मैं मानता हूं कि यह गलत है।
जॉन हैरोप

1
यह उत्तर समवर्ती और समानांतर निष्पादन के बीच के अंतर को देखने के लिए अच्छा है, लेकिन प्रोग्रामिंग के बारे में पोस्टर के मूल प्रश्न के लिए नहीं ।
Reorx

396

समवर्ती प्रोग्रामिंगउन कार्यों के संबंध में जो ओवरलैप करने के लिए दिखाई देते हैं और मुख्य रूप से उस जटिलता से संबंधित है जो गैर-नियतात्मक नियंत्रण प्रवाह के कारण उत्पन्न होती है। समवर्ती कार्यक्रमों से जुड़ी मात्रात्मक लागत आमतौर पर थ्रूपुट और विलंबता दोनों हैं। समवर्ती कार्यक्रम अक्सर IO बाध्य होते हैं, लेकिन हमेशा नहीं, उदाहरण के लिए समवर्ती कचरा संग्रहकर्ता पूरी तरह से CPU पर होते हैं। एक समवर्ती कार्यक्रम का शैक्षणिक उदाहरण एक वेब क्रॉलर है। यह कार्यक्रम वेब पेजों के लिए अनुरोध शुरू करता है और डाउनलोड के परिणाम उपलब्ध होने के साथ-साथ प्रतिक्रियाओं का एकरूपता स्वीकार करता है, उन पृष्ठों का एक सेट जमा करता है जो पहले ही देखे जा चुके हैं। नियंत्रण प्रवाह गैर-नियतात्मक है क्योंकि प्रतिक्रियाएं आवश्यक रूप से उसी क्रम में प्राप्त नहीं होती हैं, जब प्रत्येक बार कार्यक्रम चलाया जाता है। यह विशेषता समवर्ती कार्यक्रमों को डीबग करना बहुत कठिन बना सकती है।एरलंग , एफ # अतुल्यकालिक वर्कफ़्लोज़ और स्काला की अक्का लाइब्रेरी संभवतः उच्च समवर्ती प्रोग्रामिंग के लिए सबसे आशाजनक दृष्टिकोण हैं।

मल्टीकोर प्रोग्रामिंगसमानांतर प्रोग्रामिंग का एक विशेष मामला है। समानांतर प्रोग्रामिंग चिंताओं के संचालन जो थ्रूपुट में सुधार के विशिष्ट लक्ष्य के लिए अतिव्यापी हैं। नियंत्रण प्रवाह को नियतात्मक बनाकर समवर्ती प्रोग्रामिंग की कठिनाइयों को दूर किया जाता है। आमतौर पर, कार्यक्रम समानांतर में चलने वाले बाल कार्यों के सेटों को फैलाते हैं और मूल रूप से प्रत्येक उपमा समाप्त होने के बाद मूल कार्य जारी रहता है। यह समवर्ती कार्यक्रमों को समवर्ती कार्यक्रमों की तुलना में डिबग करने में बहुत आसान बनाता है। समानांतर प्रोग्रामिंग का कठिन हिस्सा प्रदर्शन अनुकूलन है जैसे कि ग्रैन्युलैरिटी और संचार जैसे मुद्दों के संबंध में। उत्तरार्द्ध अभी भी मल्टीकोर्स के संदर्भ में एक मुद्दा है क्योंकि डेटा को एक कैश से दूसरे में स्थानांतरित करने के लिए काफी लागत जुड़ी हुई है।Cilk शायद मल्टीकोर पर उच्च-प्रदर्शन समानांतर प्रोग्रामिंग के लिए सबसे आशाजनक दृष्टिकोण है और इसे इंटेल के थ्रेडेड बिल्डिंग ब्लॉक और माइक्रोसॉफ्ट के टास्क समानांतर लाइब्रेरी (.NET 4 में) दोनों में अपनाया गया है ।


18
"समानांतर प्रोग्रामिंग का कठिन हिस्सा ... जैसे कि दानेदारता और संचार।" यदि समानांतर कार्यों को संप्रेषित करने की आवश्यकता है, तो क्या यह उन्हें समवर्ती नहीं बनाता है?
जस्टिन एम। कीज़

13
"अगर समानांतर कार्यों को संवाद करने की आवश्यकता है, तो क्या यह उन्हें समवर्ती नहीं बनाता है?"। वाह, महान प्रश्न! जरूरी नहीं, नहीं। सुपर कंप्यूटर अक्सर डेटा के वैश्विक पुनर्वितरण और अधिक थोक समानता के बाद बल्क समानांतर संचालन के साथ प्रोग्राम किए जाते हैं। इसलिए समानता और संचार है लेकिन बोलने के लिए कोई वास्तविक संगामिति नहीं है। इस संदर्भ में, मैं मल्टीकोर समानांतरवाद के बारे में अधिक सोच रहा था जहां संचार का मतलब कैश जटिलता, उदाहरण के लिए कैश सुसंगतता के लिए आवश्यक संचार है। हालांकि यह समवर्ती है लेकिन यह प्रत्यक्ष रूप से दिखाई नहीं देता है।
जॉन हैरोप

43
@BoppityBop सिर्फ इसलिए कि मैं एक ड्राइंग में कह सकता हूं कि उसने एक उपन्यास में जो कहा वह मेरे जवाब को कम सही नहीं बनाता है। उन लोगों के लिए पढ़ना आसान है जो वास्तव में उत्तर नहीं जानते हैं। जो मुझे लगता है कि यहां आने की बात है। आप इस पोस्ट द्वारा उपयोग की जाने वाली भाषा में एक पुस्तक लिख सकते हैं, लेकिन यह अधिकांश पाठकों के लिए बिल्कुल अस्पष्ट होने वाली है, क्योंकि आपने शायद यह सवाल तब तक नहीं जाना है यदि आप पहले से ही जानते हैं कि jon ने क्या लिखा है।
तोर वलामो

18
यह चित्र मेरे लिए बहुत उपयोगी था, विषय के लिए बहुत नया था, और @JonHarrop से वर्णन मेरे लिए उपयोगी था, कोई है जो सही की सराहना करता है, भले ही तकनीकी, भाषा। दोनों जवाबों ने मेरी अधिक संपूर्ण समझ में योगदान दिया। हम सब जीत गए! (हालांकि मैं समानांतर निष्पादन और समानांतर प्रोग्रामिंग के बीच किए गए भेद की सराहना करता हूं)
सममरॉन

3
"एर्लैंग शायद सबसे आशाजनक आगामी भाषा है ..."। शब्दों का दिलचस्प विकल्प, चूंकि
एर्लैंग

151

https://joearms.github.io/published/2013-04-05-concurrent-and-parallel-programming.html

समवर्ती = दो कतार और एक कॉफी मशीन।

समानांतर = दो कतार और दो कॉफी मशीनें।


9
गलत और भ्रामक। समवर्ती = एक या एक से अधिक कतारों (nondeterministic composition) की अनुमति देना। समानांतर = उनमें से किसी एक को मूल से कम बनाने के लिए एक से अधिक कतारों का होना यदि खाली नहीं है (असममित दक्षता)।
फ्रैंकएच

समवर्ती कोड में दो या अधिक प्रोसेसर (या "कॉफी मशीन") की आवश्यकता होती है। इस प्रकार यह उत्तर अनिवार्य रूप से गलत है।
जेफ्री एंडरसन

6
@GeoffreyAnderson नहीं यह नहीं है। उदाहरण के लिए, धागे और प्रक्रियाओं को एक ही कोर मशीन पर समवर्ती रूप से निष्पादित किया जाता है।
जॉन हैरोप

@FrankHB - कृपया stackoverflow.com/a/57223044/1406510 पर नज़र डालें और Oracle साइट पर स्रोत लिंक को देखें - तो यह गलत नहीं हो सकता है लेकिन हमारी समझ हो सकती है। इसलिए पुनर्विचार का समय आ गया है। मैंने उसे पढ़ने के बाद अपना विचार बदल दिया।
नैनोसॉफ्ट

@GeoffreyAnderson - कृपया stackoverflow.com/a/57223044/1406510 पर एक नज़र डालें। इसमें ओरेकल से लिंक है और स्पष्ट रूप से कहा गया है कि क्या है। इसलिए इसके साथ खुद को संरेखित करने की जरूरत है।
नैनोसॉफ्ट

40

प्रोग्रामिंग के बजाय मूल प्रश्न को समानांतर / समवर्ती संगणना के रूप में व्याख्या करना ।

में समवर्ती गणना दो संगणना दोनों अग्रिम एक दूसरे से स्वतंत्र। दूसरे अभिकलन को तब तक इंतजार नहीं करना पड़ता है जब तक कि इसे आगे बढ़ने के लिए पहले समाप्त नहीं किया जाता है। हालांकि, यह नहीं बताया गया है कि यह कैसे हासिल किया जाता है। सिंगल-कोर सेटअप में, थ्रेड्स के बीच सस्पेंड और अल्टरनेटिंग की आवश्यकता होती है (इसे प्री-इप्टिव मल्टीथ्रेडिंग भी कहा जाता है)।

में समानांतर गणना दो संगणना दोनों अग्रिम एक साथ एक ही समय में सचमुच है कि -। यह एकल सीपीयू के साथ संभव नहीं है और इसके बजाय मल्टी-कोर सेटअप की आवश्यकता है।

लेख की छवियां: "नोड्स में समानांतर बनाम समवर्ती।"

निलंबित करना और ले जाना बनाम समानांतर कंप्यूटिंग



21

मेरा मानना ​​है कि समवर्ती प्रोग्रामिंग मल्टीथ्रेडेड प्रोग्रामिंग को संदर्भित करता है जो आपके प्रोग्राम को कई थ्रेड को चलाने देता है, जो हार्डवेयर विवरण से अलग है।

समानांतर प्रोग्रामिंग, विशेष रूप से उपलब्ध समानांतर निष्पादन का लाभ उठाने के लिए अपने प्रोग्राम एल्गोरिदम को विशेष रूप से डिजाइन करने को संदर्भित करता है। उदाहरण के लिए, आप अपेक्षा में कुछ एल्गोरिदम की समानांतर दो शाखाओं में निष्पादित कर सकते हैं कि यह परिणाम को जितनी जल्दी (औसत से) जल्दी हिट करेगा यदि आप पहली बार पहली और फिर दूसरी शाखा की जांच करेंगे।


2
इसे दूसरे तरीके से रखने के लिए, समानांतर में दो चीजों को निष्पादित करना उन्हें दो बार तेजी से पूरा कर सकता है। समवर्ती रूप से दो चीजों को निष्पादित करने में पहले की तरह एक ही समय लग सकता है और फिर दूसरा अगर पहले एक CPU टाइम-स्लाइसिंग है, जो पहले थोड़ा सा चल रहा है और फिर थोड़ा सा दूसरे के बीच चल रहा है, आदि
user189169

14

मुझे यह सामग्री कुछ ब्लॉग में मिली। सोचा कि यह उपयोगी और प्रासंगिक है।

समरूपता और समानतावाद एक ही बात नहीं है। दो कार्य T1 और T2 समवर्ती हैं यदि समय में दो कार्यों को जिस क्रम से निष्पादित किया जाता है वह पूर्व निर्धारित नहीं है,

T1 को T2 से पहले निष्पादित किया जा सकता है और समाप्त किया जा सकता है, T2 को T1 से पहले निष्पादित और समाप्त किया जा सकता है, T1 और T2 को एक ही समय (समानांतरवाद) पर एक साथ निष्पादित किया जा सकता है, T1 और T2 को वैकल्पिक रूप से निष्पादित किया जा सकता है, ... यदि दो समवर्ती धागे एक सिंगल-कोर नॉन-एसएमटी नॉन-सीएमपी प्रोसेसर पर चलने के लिए ओएस द्वारा शेड्यूल किया जाता है, आप समवर्ती हो सकते हैं लेकिन समानता नहीं। मल्टी-कोर, मल्टी-प्रोसेसर या वितरित सिस्टम पर समानता संभव है।

कॉनकरी को अक्सर एक प्रोग्राम की संपत्ति के रूप में संदर्भित किया जाता है, और यह एक अवधारणा है जो समानता की तुलना में अधिक सामान्य है।

स्रोत: https://blogs.oracle.com/yuanlin/entry/concurrency_vs_parallelism_concurrent_programming


9

वे दो वाक्यांश हैं जो बहुत ही अलग दृष्टिकोण से एक ही बात का वर्णन करते हैं। समानांतर प्रोग्रामिंग हार्डवेयर के दृष्टिकोण से स्थिति का वर्णन कर रही है - समानांतर में एक समस्या पर काम करने वाले कम से कम दो प्रोसेसर (संभवतः एक एकल भौतिक पैकेज के भीतर) हैं। समवर्ती प्रोग्रामिंग सॉफ्टवेयर के दृष्टिकोण से अधिक चीजों का वर्णन कर रही है - दो या अधिक क्रियाएं ठीक उसी समय (समवर्ती) हो सकती हैं।

यहां समस्या यह है कि लोग दो वाक्यांशों का उपयोग करने की कोशिश कर रहे हैं ताकि कोई भी वास्तव में मौजूद न हो। वास्तविकता यह है कि वे जिस विभाजन रेखा को खींचने की कोशिश कर रहे हैं, वह दशकों से अस्पष्ट और अविभाज्य है, और समय के साथ कभी भी अधिक अस्थिर हो गई है।

वे जो चर्चा करने की कोशिश कर रहे हैं वह यह तथ्य है कि एक बार, अधिकांश कंप्यूटरों में केवल एक ही सीपीयू था। जब आप उस एकल CPU पर कई प्रक्रियाओं (या थ्रेड्स) को निष्पादित करते हैं, तो सीपीयू केवल एक बार उन थ्रेड्स में से एक निर्देश को निष्पादित कर रहा था। संगामिति की उपस्थिति एक भ्रम था - विभिन्न थ्रेड्स से निर्देश निष्पादित करने के बीच सीपीयू स्विचिंग जल्दी से मानव धारणा (जिससे 100 एमएस से कम कुछ भी या तात्कालिक लग रहा है) के लिए यह ऐसा लग रहा था कि यह एक ही बार में कई चीजें कर रहा था।

इसके विपरीत स्पष्ट कई सीपीयू के साथ एक कंप्यूटर है, या कई कोर के साथ एक सीपीयू है, इसलिए मशीन एक ही समय में कई थ्रेड्स और / या प्रक्रियाओं से निर्देशों को निष्पादित कर रही है; कोड निष्पादित करने वाला कोड दूसरे में कोड निष्पादन पर कोई प्रभाव नहीं डाल सकता है।

अब समस्या: इस तरह के एक साफ अंतर का अस्तित्व लगभग कभी नहीं रहा है। कंप्यूटर डिजाइनर वास्तव में काफी बुद्धिमान होते हैं, इसलिए उन्होंने बहुत समय पहले यह देखा था (उदाहरण के लिए) जब आपको I / O डिवाइस से कुछ डेटा पढ़ने की आवश्यकता होती है जैसे कि डिस्क, तो यह एक लंबा समय लगता है समय (सीपीयू चक्र के संदर्भ में) से लिया गया था समाप्त। ऐसा होने के दौरान सीपीयू को छोड़ने के बजाय, उन्होंने एक प्रक्रिया / धागा को I / O अनुरोध बनाने के विभिन्न तरीकों का पता लगाया, और सीपीयू पर कुछ अन्य प्रक्रिया / थ्रेड निष्पादित से कोड दें, जबकि I / O अनुरोध पूरा हो गया।

इसलिए, मल्टी-कोर सीपीयू के आदर्श बनने से बहुत पहले, हमारे पास समानांतर में होने वाले कई थ्रेड्स से ऑपरेशन थे।

हालांकि यह केवल हिमशैल की नोक है। दशकों पहले, कंप्यूटर ने समानता का एक और स्तर प्रदान करना शुरू कर दिया। फिर से, काफी बुद्धिमान लोग होने के नाते, कंप्यूटर डिजाइनरों ने देखा कि बहुत सारे मामलों में, उनके पास निर्देश थे जो एक दूसरे को प्रभावित नहीं करते थे, इसलिए एक ही समय में एक ही स्ट्रीम से एक से अधिक निर्देशों को निष्पादित करना संभव था। एक प्रारंभिक उदाहरण जो बहुत अच्छी तरह से ज्ञात हो गया वह था कंट्रोल डेटा 6600। यह 1964 में शुरू होने पर पृथ्वी पर सबसे तेज कंप्यूटर था (एक काफी विस्तृत मार्जिन के द्वारा) - और आज भी उसी मूल वास्तुकला का बहुत उपयोग किया जाता है। यह प्रत्येक निर्देश द्वारा उपयोग किए जाने वाले संसाधनों को ट्रैक करता है, और निष्पादन इकाइयों का एक सेट होता है, जो निर्देश को निष्पादित करते हैं जैसे ही वे जिस पर निर्भर थे, वे उपलब्ध हो गए, अधिकांश हाल के इंटेल / एएमडी प्रोसेसर के डिजाइन के समान।

लेकिन (जैसा कि विज्ञापन कहते थे) प्रतीक्षा करें - यह सब नहीं है। अभी और भ्रम को जोड़ने के लिए एक और डिज़ाइन तत्व है। इसे कुछ अलग-अलग नाम दिए गए हैं (उदाहरण के लिए, "हाइपरथ्रेडिंग", "SMT", "CMP"), लेकिन वे सभी एक ही मूल विचार का उल्लेख करते हैं: एक CPU जो कुछ संसाधनों के संयोजन का उपयोग करते हुए एक साथ कई थ्रेड्स निष्पादित कर सकता है, प्रत्येक थ्रेड के लिए स्वतंत्र हैं, और कुछ संसाधन जो थ्रेड्स के बीच साझा किए जाते हैं। एक विशिष्ट मामले में यह ऊपर उल्लिखित निर्देश-स्तरीय समानता के साथ संयुक्त है। ऐसा करने के लिए, हमारे पास वास्तु रजिस्टरों के दो (या अधिक) सेट हैं। फिर हमारे पास निष्पादन इकाइयों का एक सेट है जो आवश्यक संसाधन उपलब्ध होते ही निर्देश निष्पादित कर सकता है।

फिर, निश्चित रूप से, हम कई कोर के साथ आधुनिक प्रणालियों को प्राप्त करते हैं। यहाँ चीजें स्पष्ट हैं, है ना? हमारे पास एन (कहीं पर 2 और 256 या तो, इस समय) अलग-अलग कोर हैं, जो सभी एक ही समय में निर्देशों को निष्पादित कर सकते हैं, इसलिए हमारे पास वास्तविक समानता का स्पष्ट-कट मामला है - एक प्रक्रिया / थ्रेड डन में निर्देश निष्पादित करना ' t दूसरे में निष्पादन के निर्देशों को प्रभावित करता है।

अच्छी तरह की। यहां भी हमारे पास कुछ स्वतंत्र संसाधन (रजिस्टर, निष्पादन इकाइयां, कम से कम एक स्तर कैश) और कुछ साझा संसाधन (आमतौर पर कम से कम कैश का स्तर, और निश्चित रूप से स्मृति नियंत्रक और मेमोरी के लिए बैंडविड्थ) हैं।

संक्षेप में: लोगों को साझा संसाधनों और स्वतंत्र संसाधनों के बीच विपरीत करने के लिए सरल परिदृश्य वास्तव में वास्तविक जीवन में कभी नहीं होते हैं। सभी संसाधनों को साझा करने के साथ, हम MS-DOS जैसी किसी चीज़ के साथ समाप्त हो जाते हैं, जहाँ हम एक समय में केवल एक प्रोग्राम चला सकते हैं, और हमें एक को चलाने से पहले रोकना होगा, ताकि हम दूसरे को चला सकें। पूरी तरह से स्वतंत्र संसाधनों के साथ, हमारे पास एमएस-डॉस (उन्हें कनेक्ट करने के लिए भी एक नेटवर्क के बिना) चलने वाले एन कंप्यूटर हैं, जिनके बीच कुछ भी साझा करने की क्षमता नहीं है (क्योंकि अगर हम किसी फ़ाइल को साझा कर सकते हैं, तो ठीक है, यह एक साझा संसाधन है, एक कुछ भी साझा नहीं किए जाने के मूल आधार का उल्लंघन)।

प्रत्येक दिलचस्प मामले में स्वतंत्र संसाधनों और साझा संसाधनों का कुछ संयोजन शामिल है। प्रत्येक यथोचित आधुनिक कंप्यूटर (और बहुत कुछ जो सभी आधुनिक नहीं हैं) में कम से कम कुछ स्वतंत्र संचालन को एक साथ करने की क्षमता है, और एमएस-डॉस की तुलना में अधिक परिष्कृत कुछ के बारे में कम से कम लाभ उठाया है। कुछ मात्रा में या कुछ हद तक।

"समवर्ती" और "समानांतर" के बीच अच्छा, स्वच्छ विभाजन जो लोग आकर्षित करना पसंद करते हैं, उनका अस्तित्व नहीं है, और लगभग कभी नहीं होता है। लोगों को "समवर्ती" के रूप में वर्गीकृत करने के लिए क्या पसंद है आमतौर पर अभी भी कम से कम एक और अक्सर विभिन्न प्रकार के समानांतर निष्पादन शामिल हैं। वे "समानांतर" के रूप में वर्गीकृत करना पसंद करते हैं, जिसमें अक्सर संसाधनों को साझा करना शामिल होता है और (उदाहरण के लिए) दोनों के बीच साझा किए गए संसाधन का उपयोग करते हुए एक प्रक्रिया दूसरे के निष्पादन को अवरुद्ध करती है।

"समानांतर" और "समवर्ती" के बीच एक साफ अंतर खींचने की कोशिश करने वाले लोग कंप्यूटर की एक कल्पना में जी रहे हैं जो वास्तव में कभी अस्तित्व में नहीं थे।


6
  • Concurrent programmingपर्यावरण के संदर्भ में एक सामान्य अर्थ है जिसमें हमारे द्वारा परिभाषित कार्य किसी भी क्रम में हो सकते हैं। एक कार्य पहले या बाद में हो सकता है, और कुछ या सभी कार्यों को एक ही समय में किया जा सकता है।

  • Parallel programmingविशेष रूप से विभिन्न प्रोसेसर पर समवर्ती कार्यों के एक साथ निष्पादन को संदर्भित करना है। इस प्रकार, सभी समानांतर प्रोग्रामिंग समवर्ती हैं, लेकिन सभी समवर्ती प्रोग्रामिंग समानांतर नहीं हैं।

स्रोत: PThreads प्रोग्रामिंग - बेहतर मल्टीप्रोसेसिंग, बटालर, फैरेल, निकोल्स के लिए एक POSIX मानक


5

प्रोग्रामिंग में, संगामिति स्वतंत्र रूप से निष्पादित प्रक्रियाओं की संरचना है, जबकि समानता (संभवतः संबंधित) संगणना में एक साथ निष्पादन है।
- एंड्रयू गेरैंड -

तथा

Concurrency स्वतंत्र रूप से निष्पादित संगणना की रचना है। कॉनएरेबिलिटी सॉफ्टवेयर बनाने का एक तरीका है, विशेष रूप से स्वच्छ कोड लिखने का एक तरीका है जो वास्तविक दुनिया के साथ अच्छी तरह से बातचीत करता है। यह समानता नहीं है।

समरूपता समांतरवाद नहीं है, हालांकि यह समानता को सक्षम बनाता है। यदि आपके पास केवल एक प्रोसेसर है, तो भी आपका कार्यक्रम समवर्ती हो सकता है, लेकिन यह समानांतर नहीं हो सकता है। दूसरी ओर, एक अच्छी तरह से लिखा समवर्ती कार्यक्रम एक मल्टीप्रोसेसर पर समानांतर में कुशलता से चल सकता है। यह संपत्ति महत्वपूर्ण हो सकती है ...
- रोब पाइक -

अंतर को समझने के लिए, मैं दृढ़ता से इस रोब पाइक (गोलंग रचनाकारों में से एक) का वीडियो देखने की सलाह देता हूं। समसामयिकी समानता नहीं है


Vimeo लिंक यहां काम नहीं कर रहा है youtube लिंक youtube.com/watch?v=cN_DpYBzKso
शिवप्रसाद कोईराला

5

समानांतर प्रोग्रामिंग तब होती है जब कोड को एक ही समय में निष्पादित किया जा रहा है और प्रत्येक निष्पादन दूसरे से स्वतंत्र है। इसलिए, आमतौर पर साझा चर के बारे में पूर्वाग्रह नहीं है और ऐसा इसलिए है क्योंकि ऐसा होने की संभावना नहीं है।

हालाँकि, समवर्ती प्रोग्रामिंग में विभिन्न प्रक्रियाओं / थ्रेड्स द्वारा निष्पादित किए जाने वाले कोड होते हैं जो वैरिएबल साझा करते हैं और इसलिए, इसलिए समवर्ती प्रोग्रामिंग पर हमें यह तय करने के लिए किसी प्रकार का नियम स्थापित करना चाहिए कि कौन सी प्रक्रिया / थ्रेड पहले निष्पादित होता है, हम यह चाहते हैं ताकि हम वहां सुनिश्चित हो सकें संगति होगी और हम निश्चितता के साथ जान सकते हैं कि क्या होगा। यदि कोई नियंत्रण नहीं है और सभी धागे एक ही समय में गणना करते हैं और एक ही चर पर चीजों को संग्रहीत करते हैं, तो हमें कैसे पता चलेगा कि अंत में क्या करना है? हो सकता है कि एक धागा दूसरे की तुलना में तेज़ हो, हो सकता है कि थ्रेड्स में से एक भी इसके निष्पादन के बीच में बंद हो गया हो और दूसरे ने एक भ्रष्ट (अभी तक पूरी तरह से गणना नहीं) चर के साथ एक अलग गणना जारी रखी, संभावनाएं अनंत हैं। यह इन स्थितियों में है कि हम आमतौर पर समानांतर के बजाय समवर्ती प्रोग्रामिंग का उपयोग करते हैं।


5

कार्यों का क्लासिक शेड्यूलिंग सीरियल , समानांतर या समवर्ती हो सकता है

  • सीरियल : एक ज्ञात चाल में आदेश के बाद कार्यों को एक के बाद एक निष्पादित किया जाना चाहिए या यह काम नहीं करेगा। काफी आसान।

  • समानांतर : कार्यों को एक ही समय में निष्पादित किया जाना चाहिए या यह काम नहीं करेगा।

    • किसी भी कार्य की किसी भी विफलता - कार्यात्मक या समय पर - कुल प्रणाली विफलता में परिणाम होगा।
    • सभी कार्यों में समय की एक सामान्य विश्वसनीय भावना होनी चाहिए।

    इससे बचने की कोशिश करें या हम चाय के समय तक आंसू बहाएंगे।

  • समवर्ती : हमें परवाह नहीं है। हम लापरवाह नहीं हैं, हालांकि: हमने इसका विश्लेषण किया है और इससे कोई फर्क नहीं पड़ता; इसलिए हम किसी भी समय किसी भी उपलब्ध सुविधा का उपयोग करके किसी भी कार्य को अंजाम दे सकते हैं। खुशी के दिन।

अक्सर, ज्ञात घटनाओं में उपलब्ध शेड्यूलिंग परिवर्तन जिन्हें हम एक राज्य परिवर्तन कहते हैं।

लोग अक्सर सोचते हैं कि यह सॉफ्टवेयर के बारे में है, लेकिन यह वास्तव में एक सिस्टम डिजाइन अवधारणा है जो कंप्यूटर को प्री-डेट करता है; सॉफ्टवेयर सिस्टम की गति थोड़ी धीमी थी, बहुत कम सॉफ्टवेयर भाषाएं भी समस्या का समाधान करने का प्रयास करती हैं। आप Transputer भाषा को देख कोशिश कर सकते हैं occam यदि आप रुचि रखते हैं।

सफलतापूर्वक, सिस्टम डिज़ाइन निम्नलिखित को संबोधित करता है:

  • क्रिया - आप क्या कर रहे हैं (ऑपरेशन या एल्गोरिथ्म)
  • संज्ञा - आप इसे क्या कर रहे हैं (डेटा या इंटरफ़ेस)
  • कब - दीक्षा, अनुसूची, राज्य परिवर्तन
  • कैसे - धारावाहिक, समानांतर, समवर्ती
  • जहां - एक बार जब आप जानते हैं कि चीजें कब होती हैं, तो आप कह सकते हैं कि वे कहां हो सकते हैं और पहले नहीं।
  • क्यों - यह ऐसा करने का तरीका है? वहाँ अन्य तरीके हैं, और अधिक महत्वपूर्ण बात, एक बेहतर तरीका है? यदि आप ऐसा नहीं करते हैं तो क्या होता है?

सौभाग्य।


8
मैं हर जगह कैप देखता हूं
ब्रूनो पेंटीडो

10
यह उत्तर संगामिति और समानता के विषयों की तुलना में अधिक जटिल है।
काई सेलग्रेन

3

मैंने समझा अंतर:

1) समवर्ती - साझा संसाधनों का उपयोग करके अग्रानुक्रम में चल रहा है 2) समानांतर - विभिन्न संसाधनों का उपयोग करके कंधे से कंधा मिलाकर चल रहा है

तो आप दो चीजें एक ही समय में एक दूसरे से स्वतंत्र हो सकते हैं, भले ही वे एक साथ एक ही भंडार पर आ रहे बिंदुओं (2) या दो चीजों पर एक साथ आ रहे हों (1)।


3

यद्यपि समांतर और समवर्ती के बीच के अंतर पर पूर्ण सहमति नहीं है , कई लेखक निम्नलिखित भेद करते हैं:

  • समवर्ती कंप्यूटिंग में, एक प्रोग्राम वह होता है जिसमें किसी भी समय कई कार्य प्रगति पर हो सकते हैं।
  • समानांतर कंप्यूटिंग में, एक प्रोग्राम वह है जिसमें एक समस्या को हल करने के लिए कई कार्य निकट सहयोग करते हैं।

इसलिए समानांतर कार्यक्रम समवर्ती होते हैं, लेकिन एक मल्टीटास्किंग ऑपरेटिंग सिस्टम जैसे प्रोग्राम भी समवर्ती होते हैं, तब भी जब इसे केवल एक कोर वाली मशीन पर चलाया जाता है, क्योंकि कई कार्य किसी भी समय प्रगति पर हो सकते हैं।

स्रोत : समानांतर प्रोग्रामिंग के लिए एक परिचय, पीटर पाचेको


1

कंसीडर और पैरेललिज़्म सोर्स

एकल प्रोसेसर पर एक मल्टीथ्रेडेड प्रक्रिया में, प्रोसेसर थ्रेड्स के बीच निष्पादन संसाधनों को स्विच कर सकता है, जिसके परिणामस्वरूप समवर्ती निष्पादन होता है

साझा-मेमोरी मल्टीप्रोसेसर वातावरण में एक ही मल्टीथ्रेडेड प्रक्रिया में, इस प्रक्रिया में प्रत्येक थ्रेड एक ही समय में एक अलग प्रोसेसर पर चल सकता है, जिसके परिणामस्वरूप समानांतर निष्पादन होगा

जब प्रोसेस में कम या उतने थ्रेड होते हैं जितने प्रोसेसर होते हैं, तो थ्रेडिंग सिस्टम ऑपरेटिंग वातावरण के साथ मिलकर यह सुनिश्चित करता है कि प्रत्येक थ्रेड अलग प्रोसेसर पर चलता है।

उदाहरण के लिए, एक मैट्रिक्स गुणन में जिसमें थ्रेड और प्रोसेसर की समान संख्या होती है, प्रत्येक थ्रेड (और प्रत्येक प्रोसेसर) परिणाम की एक पंक्ति की गणना करता है।


यह स्रोत केवल कार्यान्वयन का एक विशेष मामला दिखाता है - मल्टीथ्रेडिंग का एक विशेष रूप। हाँ, यह भी मल्टीथ्रेडिंग की पूरी कहानी को कवर नहीं करता है, उदाहरण के लिए एम: एन यूजरस्पेस थ्रेडिंग मॉडल और थ्रेड शेड्यूलिंग की भूमिका। थ्रेडिंग केवल सिस्टम आर्किटेक्चर (ओएस, वीएम, सीपीयू के साथ एचटी सक्षम, आदि) और / या प्रोग्रामिंग इंटरफ़ेस के अर्थ में कार्यान्वयन का एक विशेष तरीका है। आधुनिक सीपीयू के कार्यान्वयन में अनुदेश-स्तरीय समानता की तरह अधिक मौजूद हैं, जो बिना प्रोग्रामिंग इंटरफ़ेस को उजागर करता है और थ्रेड्स के साथ कुछ भी नहीं है।
फ्रैंकएचबी

@FrankHB: यदि आप अपनी सामग्री के बारे में कोई प्रामाणिक लिंक साझा कर सकते हैं, तो मैं उसकी सराहना करूँगा। मैं वास्तव में यह पता लगाना चाहूंगा कि क्या इसमें और क्या है। मेरी वर्तमान समझ काफी सरल है - किसी भी ओएस आर्किटेक्चर पर दिए गए थ्रेड शेड्यूलिंग तंत्र के साथ एक बहु-थ्रेडेड ऐप चलाना समानांतर या समवर्ती है यह सवाल है? यहां तक ​​कि अगर आपने M: N यूजरस्पेस दिया है - तो आप कैसे बनाते हैं कि RUN समानांतर या समवर्ती है?
nanosoft

मैंने विभिन्न अमूर्तताओं में समस्याओं पर चर्चा करने के लिए एक उत्तर लिखा है ।
फ्रैंकहब

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

0

अलग-अलग लोग कई अलग-अलग विशिष्ट मामलों में अलग-अलग प्रकार के समवर्ती और समानता के बारे में बात करते हैं, इसलिए उनके सामान्य स्वभाव को कवर करने के लिए कुछ सार की आवश्यकता होती है।

मूल अमूर्तता कंप्यूटर विज्ञान में की जाती है, जहां कार्यक्रमों के गुणों के लिए समवर्ती और समानांतरवाद दोनों को जिम्मेदार ठहराया जाता है । यहां, कार्यक्रमों को कंप्यूटिंग के औपचारिक विवरण दिए गए हैं। इस तरह के कार्यक्रमों को किसी विशेष भाषा या एन्कोडिंग में नहीं होना चाहिए, जो कार्यान्वयन-विशिष्ट है। एपीआई / एबीआई / आईएसए / ओएस का अस्तित्व अमूर्तता के ऐसे स्तर के लिए अप्रासंगिक है। निश्चित रूप से किसी को ठोस प्रोग्रामिंग कार्यों को करने के लिए अधिक विस्तृत कार्यान्वयन-विशिष्ट ज्ञान (जैसे थ्रेडिंग मॉडल) की आवश्यकता होगी, मूल अमूर्तता के पीछे की भावना को नहीं बदला गया है।

एक दूसरा महत्वपूर्ण तथ्य यह है कि सामान्य गुणों के रूप में, संगामिति और समानता कई अलग-अलग सार में सह-अस्तित्व में हो सकते हैं

सामान्य भेद के लिए, देखना प्रासंगिक जवाब संगामिति v। समानांतरवाद के बुनियादी दृश्य के लिए।(कुछ लिंक भी हैं जिनमें कुछ अतिरिक्त स्रोत हैं।)

समवर्ती प्रोग्रामिंग और समानांतर प्रोग्रामिंग कुछ प्रणालियों के साथ ऐसे सामान्य गुणों को लागू करने की तकनीक है जो प्रोग्रामेबिलिटी को उजागर करते हैं। सिस्टम आमतौर पर प्रोग्रामिंग भाषा और उनके कार्यान्वयन हैं।

एक प्रोग्रामिंग भाषा बिल्ट-इन अर्थ नियमों द्वारा इच्छित गुणों को उजागर कर सकती है। ज्यादातर मामलों में, इस तरह के नियम विशिष्ट भाषा संरचनाओं (उदाहरण के भाव) के मूल्यांकन को निर्दिष्ट करते हैं, जो गणना को प्रभावी ढंग से समवर्ती या समानांतर बनाते हैं। (अधिक विशेष रूप से, मूल्यांकन द्वारा निहित कम्प्यूटेशनल प्रभाव इन गुणों को पूरी तरह से प्रतिबिंबित कर सकते हैं।) हालांकि, समवर्ती / समानांतर भाषा शब्दार्थ अनिवार्य रूप से जटिल हैं और वे व्यावहारिक कार्यों (यथार्थवादी समवर्ती / समानांतर एल्गोरिदम को यथार्थवादी समस्याओं के समाधान के रूप में लागू करने के लिए आवश्यक नहीं हैं)। )। इसलिए, अधिकांश पारंपरिक भाषाएं अधिक रूढ़िवादी और सरल दृष्टिकोण लेती हैं: मूल्यांकन के शब्दार्थ को पूरी तरह से अनुक्रमिक और धारावाहिक मानते हुए, फिर अनुमति देने के लिए वैकल्पिक प्रिमिटिव प्रदान करते हैं। कुछ करते हैं।संगणना समवर्ती और समानांतर हो रही है। ये आदिम भाषा द्वारा समर्थित कीवर्ड या प्रक्रियात्मक निर्माण ("फ़ंक्शन") हो सकते हैं। वे होस्ट किए गए वातावरण (ओएस, या "नंगे धातु" हार्डवेयर इंटरफ़ेस) के साथ बातचीत के आधार पर कार्यान्वित किए जाते हैं, आमतौर पर अपारदर्शी (भाषा का उपयोग करके भाषा का उपयोग नहीं किया जा सकता है)। इस प्रकार, प्रोग्रामर्स द्वारा देखे गए इस विशेष प्रकार के उच्च-स्तरीय अमूर्त में, इन "जादू" आदिम और इन आदिमों पर निर्भर कार्यक्रमों के अलावा समवर्ती / समानांतर कुछ भी नहीं है; प्रोग्रामर तब प्रोग्रामिंग के कम त्रुटि वाले अनुभव का आनंद ले सकते हैं जब संगामिति / समानतावाद गुण इतने रुचि नहीं रखते हैं।

यद्यपि प्राइमेटिव सबसे उच्च-स्तरीय अमूर्त में जटिल को दूर करते हैं, लेकिन कार्यान्वयन में अभी भी अतिरिक्त जटिलता भाषा की विशेषता से उजागर नहीं होती है। तो, कुछ मध्य-स्तर के सार की आवश्यकता होती है। एक विशिष्ट उदाहरण थ्रेडिंग है । थ्रेडिंग एक या एक से अधिक निष्पादन की अनुमति देता है (या बस धागा ; कभी-कभी इसे एक प्रक्रिया भी कहा जाता है , जो जरूरी नहीं कि ओएस में निर्धारित कार्य की अवधारणा) भाषा कार्यान्वयन (रनटाइम) द्वारा समर्थित है। थ्रेड्स आमतौर पर प्रीमेच्योर रूप से रनटाइम द्वारा निर्धारित किए जाते हैं, इसलिए एक थ्रेड को अन्य थ्रेड्स के बारे में कुछ भी जानने की आवश्यकता नहीं है। इस प्रकार, धागे स्वाभाविक रूप से समानांतरता को लागू करने के लिए स्वाभाविक हैं जब तक वे कुछ भी साझा नहीं करते हैं (ए महत्वपूर्ण संसाधन)): बस अलग-अलग थ्रेड्स में कम्प्यूटेशन को अपघटित करना, एक बार अंतर्निहित कार्यान्वयन निष्पादन के दौरान कम्प्यूटेशन संसाधनों के ओवरलैपिंग की अनुमति देता है, यह काम करता है। थ्रेड्स भी साझा संसाधनों के समवर्ती एक्सेस के अधीन हैं: किसी भी क्रम में एक्सेस संसाधनों को एल्गोरिथम द्वारा आवश्यक न्यूनतम बाधाओं को पूरा करता है, और कार्यान्वयन अंततः निर्धारित करेगा कि एक्सेस कब करना है। ऐसे मामलों में, कुछ सिंक्रनाइज़ेशन ऑपरेशन आवश्यक हो सकते हैं। कुछ भाषाएं थ्रेडिंग और सिंक्रोनाइज़ेशन ऑपरेशन को उच्च-स्तरीय अमूर्त के हिस्सों के रूप में मानती हैं और उन्हें आदिम के रूप में उजागर करती हैं, जबकि कुछ अन्य भाषाएँ इसके बजाय केवल अपेक्षाकृत उच्च-स्तर की प्राथमिकताओं (जैसे वायदा / वादे ) को प्रोत्साहित करती हैं ।

भाषा-विशिष्ट थ्रेड्स के स्तर के तहत, अंतर्निहित होस्टिंग वातावरण (आमतौर पर, एक ओएस) की मल्टीटास्किंग आती है। ओएस-लेवल प्रीमिटिव मल्टीटास्किंग का इस्तेमाल मल्टीप्रेडिंग को लागू करने (प्रीमेप्टिव) के लिए किया जाता है। विंडोज एनटी जैसे कुछ वातावरणों में, मूल शेड्यूलिंग यूनिट (कार्य) "थ्रेड" भी हैं। उपर्युक्त धागों के यूजरस्पेस कार्यान्वयन के साथ उन्हें अलग करने के लिए, उन्हें कर्नेल थ्रेड्स कहा जाता है, जहां "कर्नेल" का अर्थ है ओएस का कर्नेल (हालांकि, सख्ती से बोलते हुए, यह विंडोज़ एनटी के लिए बिल्कुल सच नहीं है; "वास्तविक" कर्नेल NT है कार्यकारी) । कर्नेल थ्रेड्स हमेशा 1: 1 मैप नहीं किए जाते हैं, उपयोगकर्ता थ्रेड्स के लिए मैप किए जाते हैं, हालांकि 1: 1 मैपिंग अक्सर मैपिंग के अधिकांश ओवरहेड को कम कर देता है। चूँकि कर्नेल थ्रेड हैवीवेट (सिस्टम कॉल्स से युक्त) बनाने / नष्ट करने / संचार करने के लिए होते हैं,हरे धागेमैपिंग ओवरहेड की कीमत पर ओवरहेड समस्याओं को दूर करने के लिए यूजरस्पेस में। उच्च स्तरीय अमूर्तता में अपेक्षित प्रोग्रामिंग प्रतिमान के आधार पर मैपिंग का विकल्प। उदाहरण के लिए, जब बड़ी संख्या में उपयोगकर्ता थ्रेड्स समवर्ती रूप से निष्पादित किए जाने की उम्मीद करते हैं (जैसे एरलैंग ), 1: 1 मैपिंग कभी संभव नहीं है।

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

ऊपर वर्णित "थ्रेडिंग" के प्रत्येक स्तर में, संगामिति और समानांतरवाद दोनों शामिल हैं। यद्यपि प्रोग्रामिंग इंटरफेस नाटकीय रूप से भिन्न होते हैं, उनमें से सभी शुरुआत में मूल अमूर्तता द्वारा प्रकट गुणों के अधीन होते हैं।


0

बस एक उदाहरण साझा करना जो भेद को उजागर करने में मदद करता है:

समानांतर प्रोग्रामिंग: कहते हैं कि आप मर्ज-सॉर्ट एल्गोरिथ्म को लागू करना चाहते हैं । हर बार जब आप समस्या को दो उप-समस्याओं में विभाजित करते हैं, तो आपके पास दो धागे हो सकते हैं जो उन्हें हल करते हैं। हालाँकि, मर्ज चरण को करने के लिए आपको इन दोनों थ्रेड के समाप्त होने की प्रतीक्षा करनी होगी क्योंकि विलय के लिए दोनों उप-समाधानों की आवश्यकता होती है। यह "अनिवार्य प्रतीक्षा" इसे एक समानांतर कार्यक्रम बनाती है।

समवर्ती कार्यक्रम: कहते हैं कि आप n पाठ फ़ाइलों को संपीड़ित करना चाहते हैं और उनमें से प्रत्येक के लिए एक संपीड़ित फ़ाइल जनरेट करना चाहते हैं। आपके पास 2 से (n तक) थ्रेड हो सकते हैं जो प्रत्येक हैंडल को फ़ाइलों के सबसेट को संपीड़ित करते हैं। जब प्रत्येक धागा किया जाता है, तो यह बस हो जाता है, इसके लिए इंतजार करने या कुछ और करने की ज़रूरत नहीं है। इसलिए, चूंकि विभिन्न कार्यों को "किसी भी मनमाने ढंग से आदेश" में एक interleaved तरीके से किया जाता है, इसलिए कार्यक्रम समवर्ती है, लेकिन समानांतर नहीं है।

जैसा कि किसी और ने उल्लेख किया है, हर समानांतर कार्यक्रम समवर्ती है (वास्तव में होना चाहिए), लेकिन आसपास का दूसरा तरीका नहीं।


0

मैं इसे अपने अंदाज में समझाने की कोशिश करूंगा, यह कंप्यूटर के संदर्भ में नहीं हो सकता है लेकिन यह आपको सामान्य विचार देता है।

आइए एक उदाहरण लेते हैं, घरेलू कामों को कहते हैं: बर्तन साफ़ करना, कूड़ेदान निकालना, लॉन घास काटना इत्यादि, हमारे पास भी करने के लिए 3 लोग (धागे) A, B, C हैं।

समवर्ती: तीन व्यक्ति स्वतंत्र रूप से अलग-अलग कार्य शुरू करते हैं,

A --> cleaning dishes
B --> taking out trash 
C --> mowing the lawn 

यहां, कार्यों का क्रम अनिश्चित है और प्रतिक्रियाएं काम की मात्रा पर निर्भर करती हैं

समानांतर: यहां यदि हम थ्रूपुट में सुधार करना चाहते हैं, तो हम कई लोगों को एक ही कार्य के लिए असाइन कर सकते हैं, उदाहरण के लिए, व्यंजन की सफाई हम दो लोगों को प्रदान करते हैं, ए साबुन को बर्तन धोने और बी धोने वाले व्यंजन जो थ्रूपुट में सुधार कर सकते हैं

बर्तन साफ ​​करना:

A --> soaping the dishes
B --> washing the dishes

जल्द ही

आशा है कि यह एक विचार देता है! अब उन तकनीकी शब्दों को आगे बढ़ाएं जिन्हें अन्य उत्तरों में समझाया गया है;)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.