समरूपता, समानतावाद और अतुल्यकालिक तरीकों के बीच अंतर क्या है?


177

अलग-अलग थ्रेड्स पर समरूपता सम्‍मिलित दो कार्य चल रहे हैं। हालांकि, अतुल्यकालिक तरीके समानांतर में चलते हैं लेकिन एक ही 1 धागे पर। यह कैसे प्राप्त किया जाता है? इसके अलावा, समानता के बारे में क्या?

इन 3 अवधारणाओं के बीच अंतर क्या हैं?


8
शब्द "एसिंक्रोनस" का अर्थ बहुत सारी अलग-अलग चीजें हो सकती हैं। वे शब्द संबंधित हैं, लेकिन वे चीजों के निराशाजनक सेट का वर्णन नहीं करते हैं। अर्थ ओवरलैप करते हैं और स्थिति से भिन्न होते हैं।
पॉइंटी

2
इसलिए पहली समसामयिकता एक ही समय में दो या अधिक प्रक्रियाएँ चला रही है। उस रास्ते से, समवर्ती होने के नाते समानांतर नहीं किया जा रहा है। समानांतर प्रक्रियाओं के लिए दो या अधिक कोर की आवश्यकता होती है, जबकि समवर्ती प्रक्रियाएं एक ही कोर साझा कर सकती हैं।
रिक ओ'शिथ

जवाबों:


139

समवर्ती और समानांतर प्रभावी रूप से एक ही सिद्धांत है जैसा कि आप सही ढंग से सही करते हैं, दोनों एक साथ निष्पादित किए जाने वाले कार्यों से संबंधित हैं, हालांकि मैं कहूंगा कि समानांतर कार्यों को वास्तव में "एक ही समय में निष्पादित" किया जाना चाहिए, जबकि समवर्ती का मतलब हो सकता है कि कार्य साझा कर रहे हैं। निष्पादन धागा, जबकि अभी भी समानांतर में निष्पादित हो रहा है।

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

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

उपयोगकर्ता के दृष्टिकोण से, यह मल्टीटास्किंग की तरह प्रतीत होता है लेकिन यह नहीं हो सकता है।


संपादित करें

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


34
मेरा तर्क है कि आप अपने पहले पैराग्राफ में समानता और समरूपता मिश्रित हैं। कॉनएरेबिलिटी निष्पादन के कई थ्रेड्स को प्रबंधित करने को संदर्भित करता है, जहां समानता विशेष रूप से अधिक होती है, निष्पादन के कई धागे एक साथ निष्पादित होते हैं। सम्‍मिलितता एक व्‍यापक शब्‍द है जो समानता को सम्‍मिलित कर सकता है।
मार्क एच

7
जबकि दो शब्द बहुत समान हैं और भ्रमित हो सकते हैं (और अक्सर होते हैं), उनकी अलग-अलग परिभाषाएँ होती हैं: समवर्ती = मौजूदा, हो रहा है, या एक ही समय में किया जाता है। समान या अलग-अलग उपकरणों द्वारा एक बार में एक से अधिक ऑपरेशनों के स्पष्ट या वास्तविक प्रदर्शन से संबंधित = के समानांतर या। जैसा कि आप देख सकते हैं कि समानांतर का मतलब जरूरी नहीं कि समवर्ती हो, लेकिन सिर्फ समवर्ती दिखाई दे सकता है। दिन के अंत में, शब्दों को अक्सर एक- दूसरे के साथ इस्तेमाल किया जाता है और n देव के साथ एक कमरा है जिसमें आपको शायद n 1 परिभाषाएँ मिलेंगी ;)
लाजर

3
@ मेहरदाद यदि आप विपणन सामग्रियों में उनके उपयोग पर शब्दकोश शब्दों की अपनी परिभाषाओं को आधार बनाने जा रहे हैं, तो मुझे लगता है कि आप कुछ हद तक अपने आप को खोजने की संभावना रखते हैं।
लाजर

6
गलत। प्रोग्रामिंग के संदर्भ में, संगामिति आपके कोड को तर्क के बिट्स में "रचित" होने की क्षमता है जो एक ही समय में चलाया जा सकता है। समानांतरवाद (जब संगति के साथ संयुक्त) कहा कोड ले रहा है और इसे 100-कोर मशीन पर चला रहा है।
फ्रैंक रैडोकाज

2
@FrankRadocaj के पास यह अधिकार है। समवर्ती का अर्थ है कि कार्यक्रम को इकाइयों में विभाजित किया जा सकता है (इकाइयां अनिवार्य रूप से धागे हैं) जिन्हें किसी भी क्रम में चलाया जा सकता है और एक परिणाम निर्धारित होता है। समानांतर का अर्थ है कि ये इकाइयाँ / धागे शाब्दिक रूप से एक ही समय में कई प्रोसेसर पर चल रहे हैं।

89

संक्षेप में,

Concurrency का अर्थ है ऐसे कई कार्य जो बिना किसी विशेष क्रम के ओवरलैपिंग समयावधि में शुरू, चलते और पूर्ण होते हैं। समानांतरवाद तब होता है जब एक ही समय में बहु-कोर प्रोसेसर पर कई कार्य या एक अद्वितीय कार्य के कई भाग एक ही समय में चलते हैं, जैसे।

याद रखें कि समरूपता और समानतावाद एक ही बात नहीं है।

समरूपता बनाम समानतावाद के बीच अंतर

अब संक्षिप्तता और समानता के बीच उल्लेखनीय अंतरों को सूचीबद्ध करते हैं।

समसामयिकता तब होती है जब दो कार्य ओवरलैपिंग समयावधि में शुरू हो सकते हैं, चल सकते हैं, और पूरे हो सकते हैं। समानांतरवाद तब होता है जब कार्य शाब्दिक रूप से एक ही समय में चलते हैं, जैसे। मल्टी-कोर प्रोसेसर पर।

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

कॉनक्यूरेन्सी एक साथ बहुत सारी चीजों से निपटने के बारे में है। समानांतरवाद एक ही बार में बहुत सारी चीजें करने के बारे में है।

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

एक अनुप्रयोग समानांतर हो सकता है - लेकिन समवर्ती नहीं, जिसका अर्थ है कि यह एक ही समय में मल्टी-कोर सीपीयू में एक कार्य के कई उप-कार्यों को संसाधित करता है।

एक एप्लिकेशन न तो समानांतर हो सकता है - न ही समवर्ती, जिसका अर्थ है कि यह एक समय में सभी कार्यों को क्रमिक रूप से संसाधित करता है।

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

संगामिति

जब हम न्यूनतम दो कार्यों या उससे अधिक के बारे में बात करते हैं, तो संगाम्यता अनिवार्य रूप से लागू होती है जब कोई एप्लिकेशन लगभग एक ही समय में दो कार्यों को निष्पादित करने में सक्षम होता है, तो हम इसे समवर्ती अनुप्रयोग कहते हैं। हालांकि यहां कार्य एक साथ चलते हैं, लेकिन अनिवार्य रूप से वे MAY नहीं हैं। वे ऑपरेटिंग सिस्टम के सीपीयू टाइम-स्लाइसिंग सुविधा का लाभ उठाते हैं जहां प्रत्येक कार्य अपने कार्य का हिस्सा होता है और फिर प्रतीक्षा स्थिति में जाता है। जब पहला कार्य प्रतीक्षा की स्थिति में होता है, तो इसे कार्य का हिस्सा पूरा करने के लिए CPU को दूसरा कार्य सौंपा जाता है।

इस प्रकार कार्यों की प्राथमिकता के आधार पर ऑपरेटिंग सिस्टम, सीपीयू और अन्य कंप्यूटिंग संसाधनों जैसे कि मेमोरी; सभी कार्यों को बारी-बारी से करें और उन्हें पूरा करने का मौका दें। उपयोगकर्ता को समाप्त करने के लिए, ऐसा लगता है कि सभी कार्य समानांतर में चल रहे हैं। इसे कंसीलर कहा जाता है।

समानता

समानांतरवाद को अस्तित्व में दो कार्यों की आवश्यकता नहीं है। यह वास्तव में सीपीयू के मल्टी-कोर इंफ्रास्ट्रक्चर का उपयोग करते हुए प्रत्येक कार्य या उप-कार्य को एक ही समय पर करने के साथ, शारीरिक रूप से कार्यों या कई कार्यों के कुछ हिस्सों को चलाता है।

समानांतरता को आवश्यक रूप से कई प्रसंस्करण इकाइयों के साथ हार्डवेयर की आवश्यकता होती है। सिंगल कोर सीपीयू में, आप समवर्ती हो सकते हैं लेकिन समानता नहीं।

अतुल्यकालिक तरीके

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


2
बहुत मददगार। धन्यवाद
नेहा

मैं अभी भी Async vs concurrency के बारे में उलझन में हूँ। मैंने वाक्यांश "रनिंग टास्क एसिंक्रोनसली" और "रनिंग फंक्शन्स समवर्ती" देखा है। अतुल्यकालिक और रनिंग कार्यों को समवर्ती रूप से चलाने का मतलब एक ही बात से लगता है?
मूंदड़ा

1
@Moondra Async कार्य एक ही थ्रेड पर चलता है, जो मल्टीथ्रेडिंग से संबंधित नहीं है। async टास्क आपके एप्लिकेशन के बाहर एक बाहरी प्रक्रिया को एक कार्य भेजता है ... यानी डेटाबेस, फ़ाइल रीडर ... ये IO प्रक्रियाएं हैं, फिर IO प्रक्रिया समाप्त होने पर एक क्रिया करने के लिए प्रक्रिया पर एक कॉलबैक जोड़ा जाता है। मुझे यकीन नहीं है कि कुछ प्रोग्रामिंग भाषा में कुछ "async" विशेषताएं हैं जो एक अलग नया थ्रेड बनाता है जब आप एक async कार्य को कॉल करते हैं, तो मैंने सुना है कि C # एक है, लेकिन मैं इस प्रकार निश्चित नहीं हूं
Tobi Owolawi

56

कंसीडर तब होता है जब प्रत्येक कार्य को एक के बाद एक क्रमबद्ध रूप से निष्पादित करने के बजाय कई कार्यों का निष्पादन होता है।

समानांतरवाद तब है जब इन कार्यों को वास्तव में समानांतर में निष्पादित किया जा रहा है।

यहां छवि विवरण दर्ज करें


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

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें


6
सरल, प्रभावी चित्रण।
contactmatt

1
समरूपता अतुल्यकालिक के समान है?
nos

1
ये 2 अवधारणाएं बहुत करीब हैं, वास्तव में, लेकिन समान नहीं हैं। व्यवहार में, अतुल्यकालिकता क्रियाओं (A & B) के बीच परस्पर क्रिया से संबंधित है, जहाँ एक (B) को दूसरे (A) से ट्रिगर किया जाता है और क्या दूसरा पूरा होने के लिए पहले इंतजार करेगा। Concurrency क्रियाओं के लिए एक अधिक सामान्य शब्द है जो एक दूसरे से असंबंधित भी हो सकते हैं और चाहे वे अनुक्रम में निष्पादित किए जाते हैं या उनके निष्पादन में हस्तक्षेप किया जाता है।
डिमोस

1
इसलिए अतुल्यकालिक ज्यादातर अवरुद्ध और गैर अवरुद्ध के बारे में है
डैनियल

15

हर किसी को अतुल्यकालिक या तो समानता या संगति से जुड़ने में परेशानी हो रही है क्योंकि अतुल्यकालिक या तो समानांतर या समवर्ती के लिए एक एंटोनॉम नहीं है। यह सिंक्रोनस का एनटोनियम है। जो सिर्फ इंगित करता है कि क्या कुछ है, इस मामले में धागे, कुछ और के साथ सिंक किया जाएगा, इस मामले में एक और धागा।


13

ऐसे कई परिदृश्य हैं जिनमें संगामिति हो सकती है:

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

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

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


ये वास्तव में अच्छी उपमाएँ हैं! धन्यवाद। क्या यह कहना उचित होगा कि संगामिति को आपकी मल्टीथ्रेडिंग परिभाषा के साथ परिभाषित किया जा सकता है? इसलिए समरूपता = एकल-कोर पर मल्टीथ्रेडिंग जो ऐसा लगता है कि यह एक ही समय में हो रहा है, लेकिन यह वास्तव में बहुत जल्दी आगे और पीछे स्विच कर रहा है?
वोंगज़

3

संगामिति

Concurrency का अर्थ है कि एक अनुप्रयोग एक ही समय में (समवर्ती) एक से अधिक कार्य पर प्रगति कर रहा है। ठीक है, अगर कंप्यूटर में केवल एक ही सीपीयू है, तो एप्लिकेशन एक ही समय में एक से अधिक कार्य पर प्रगति नहीं कर सकता है, लेकिन एप्लिकेशन के अंदर एक समय में एक से अधिक कार्य संसाधित किए जा रहे हैं। अगले कार्य को शुरू करने से पहले यह एक कार्य को पूरी तरह से समाप्त नहीं करता है।

समानता

समानांतरवाद का अर्थ है कि एक अनुप्रयोग अपने कार्यों को छोटे उप-प्रकारों में विभाजित करता है जिन्हें समानांतर में संसाधित किया जा सकता है, उदाहरण के लिए एक ही समय में कई सीपीयू पर।

कॉनकरेन्सी बनाम पैरेलिज्म इन डिटेल

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

दूसरी ओर समानांतरता, इस बात से संबंधित है कि कोई एप्लिकेशन प्रत्येक व्यक्तिगत कार्य को कैसे संभालता है। कोई अनुप्रयोग कार्य को प्रारंभ से अंत तक क्रमिक रूप से संसाधित कर सकता है, या कार्य को उप-प्रकारों में विभाजित कर सकता है जिसे समानांतर में पूरा किया जा सकता है।

जैसा कि आप देख सकते हैं, एक आवेदन समवर्ती हो सकता है, लेकिन समानांतर नहीं। इसका मतलब यह है कि यह एक ही समय में एक से अधिक कार्य करता है, लेकिन कार्य उप-प्रकारों में विभाजित नहीं होते हैं।

एक आवेदन भी समानांतर हो सकता है लेकिन समवर्ती नहीं। इसका मतलब यह है कि आवेदन केवल एक समय में एक कार्य पर काम करता है, और यह कार्य उप-प्रकारों में टूट जाता है जिसे समानांतर में संसाधित किया जा सकता है।

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

अंत में, एक आवेदन समवर्ती और समानांतर दोनों हो सकता है, जिसमें यह दोनों एक ही समय में कई कार्यों पर काम करता है, और समानांतर निष्पादन के लिए प्रत्येक कार्य को उप-कार्य में भी तोड़ता है। हालाँकि, इस परिदृश्य में समवर्ती और समानांतरवाद के कुछ लाभ खो सकते हैं, क्योंकि कंप्यूटर में सीपीयू पहले से ही या तो समवर्ती या समानांतरवाद के साथ यथोचित रूप से व्यस्त हैं। इसे संयोजित करने से केवल एक छोटा प्रदर्शन लाभ या प्रदर्शन हानि हो सकती है। सुनिश्चित करें कि आप एक समवर्ती समानांतर मॉडल को नेत्रहीन रूप से अपनाने से पहले विश्लेषण और माप करते हैं।

से http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html


3

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

समवर्ती: समांतरवाद के बिना संगति नहीं हो सकती है (चाहे सिम्युलेटेड या वास्तविक, जैसा कि मैंने ऊपर बताया गया है), लेकिन यह शब्द विशेष रूप से इस तथ्य पर केंद्रित है कि दोनों प्रणालियां एक ही समय में एक ही संसाधन को किसी बिंदु पर एक्सेस करने का प्रयास करेंगी । यह इस तथ्य पर जोर डालता है कि आप इससे निपटने जा रहे हैं।

एसिंक्रोनस : हर कोई यह कह कर सही है कि एसिंक्रोनस समानता के साथ असंबंधित है, लेकिन यह इसके लिए मार्ग प्रशस्त करता है (बोझ आप पर है कि चीजों को समानांतर बनाया जाए या नहीं - पढ़ते रहें)।

"एसिंक्रोनस" समानांतरवाद के एक प्रतिनिधित्व को संदर्भित करता है जो आमतौर पर समानता में शामिल तीन बुनियादी चीजों को औपचारिक बनाता है: 1) कार्य के आरंभीकरण को परिभाषित करें (कहो कि यह कब शुरू होता है और क्या पैरामीटर मिलता है), 2) खत्म होने के बाद क्या करना चाहिए और 3) कोड को इनबेटवर्क करते रहना चाहिए।

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


2

यहाँ स्पष्ट करने के लिए शब्दार्थ का एक सा है:

समरूपता या समानांतरवाद संसाधन विवाद का सवाल है , जबकि अतुल्यकालिक नियंत्रण प्रवाह के बारे में है ।

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

अतुल्यकालिक प्रक्रियाओं या संचालन को समवर्ती कहा जाता है, जब वे संसाधनों को साझा करते हैं ; किसी भी समय T में विरोधाभास की निश्चित संभावना है। कोई संसाधन साझा नहीं किए जाने पर समानांतर रूप से गारंटी दी जाती है (जैसे विभिन्न प्रोसेसर और भंडारण); अन्यथा Concurrency नियंत्रण को संबोधित किया जाना चाहिए।

इसलिए एक अतुल्यकालिक प्रक्रिया या ऑपरेशन को समानांतर या समवर्ती रूप से दूसरों के साथ संसाधित किया जा सकता है।


2

कॉनक्यूरेन्सी का अर्थ है एक ही समय में कई कार्यों को अंजाम देना लेकिन एक साथ जरूरी नहीं। जब आपको एक से अधिक कार्य करने होते हैं, लेकिन आपके पास एक ही संसाधन होता है, तो हम समसामयिकी के लिए जाते हैं। सिंगल कोर एनवायरनमेंटल कॉन्सेप्ट कॉन्सेप्ट स्विचिंग द्वारा हासिल किया जाता है।

समानांतरवाद एक साथ एक से अधिक कार्य करने जैसा है जैसे आप गा सकते हैं और एक साथ स्नान कर सकते हैं। अब आप Parallel में कार्य कर रहे हैं।

एसिंक्रोनस एक ऐसी चीज है जो एसिंक्रोनस मॉडल में थ्रेड निष्पादन से संबंधित है जब एक कार्य निष्पादित हो जाता है, तो आप पिछले को पूरा करने के लिए इंतजार किए बिना एक अलग कार्य पर स्विच कर सकते हैं।

अतुल्यकालिक प्रोग्रामिंग हमें संगामिति प्राप्त करने में मदद करता है। एक बहु-थ्रेडेड वातावरण में एसिंक्रोनस प्रोग्रामिंग समानांतरवाद को प्राप्त करने का एक तरीका है।


2

"सिंक और एसिंक्स प्रोग्रामिंग मॉडल हैं। समवर्ती और समानांतर ऐसे तरीके हैं जिनसे कार्यों को निष्पादित किया जाता है ..."। स्रोत: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66

दूसरे शब्दों में, सिंक और एसिंक्स वर्णन करते हैं कि फ़ंक्शन कॉल करते समय आपका प्रोग्राम कैसे निष्पादित होता है (क्या यह प्रतीक्षा करेगा या क्या यह निष्पादित करना जारी रखेगा?), समवर्ती और समानांतर का वर्णन करते हैं कि कैसे एक फ़ंक्शन (कार्य) निष्पादित किया जाएगा (समवर्ती = संभवतः निष्पादित)। एक ही समय, समानांतर = प्रभावी ढंग से एक ही समय में निष्पादित)।


माध्यम कोई स्रोत नहीं है, यह किसी व्यक्ति द्वारा किसी विषय के बारे में उसकी (गलत) समझ के बारे में बात करने का एक लेख है, यह उसे एक अधिकार नहीं बनाता है।
मोहम्मदी ऊंट

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

स्टैकओवरफ़्लो में आपको कम से कम एक मतदान प्रणाली होती है, और यह पेशेवरों का एक समुदाय है। माध्यम पर कोई भी कुछ भी लिख सकता है। यह दोनों के बीच उचित तुलना नहीं है।
मोहम्मदी ऊंट

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

समस्या यह नहीं है कि माध्यम एक बुरा स्रोत है, समस्या यह है कि एक उत्तर जो केवल बाहरी पृष्ठ से लिंक करता है, वह उत्तर नहीं है। यदि आप उद्धृत भाग पर विस्तृत करते हैं या लेख की सामग्री को संक्षेप में जोड़ते हैं, तो आप इस उत्तर को बहुत सुधार सकते हैं।
डेविड श्वार्ट्ज

1

कांसेप्ट VS PARALLELISM: एक समय में केवल एक ही कार्य किया जा सकता है। उदाहरण: एकल सीपीयू प्रोसेसर समानता एक बिंदु पर हम कई कार्य कर सकते हैं। उदाहरण: डुअल कोर या मल्टी कोर प्रोसेसर


1

यहाँ मैं कुछ उदाहरणों के साथ समझाता हूँ


समानता

एक GPU हजारों भौतिक और तार्किक थ्रेड्स पर कोड (AKA कर्नेल ) के समान ब्लॉक को संसाधित करने के लिए समानांतर प्रसंस्करण का उपयोग करता है । आदर्श रूप से, प्रक्रिया एक ही समय में सभी थ्रेड्स के लिए शुरू और समाप्त होती है। हाइपरथ्रेडिंग के बिना एक एकल CPU कोर समानांतर प्रसंस्करण नहीं कर सकता है।

नोट: मैंने आदर्श रूप से कहा क्योंकि जब आप 6M थ्रेड्स के साथ हार्डवेयर पर 7M कॉल के आकार के साथ एक कर्नेल चलाते हैं, तो इसे सभी 6M थ्रेड पर समान रूप से सभी 6M थ्रेड का उपभोग करते हुए दो बार चलाना होता है।

  • एक कर्नेल (कोड का एक टुकड़ा) कई प्रोसेसर पर निष्पादित किया जाता है
  • एक साथ
  • साथ एक एकल निष्पादन अनुक्रम (एक गिरी , सभी धागे में एक ही बात करना चाहिए ताकि "शाखाओं" या रों क्योंकि वे NOPs (नो-संचालन के बहुत सारे बनाने के द्वारा काफी संसाधनों की खपत होगी सभी धागे सिंक्रनाइज़ करने से परहेज कर रहे "अगर"))
  • अनिवार्य रूप से तेजी से गति बढ़ जाती है
  • आप क्या कर सकते हैं काफी हद तक
  • अत्यधिक हार्डवेयर पर निर्भर करता है

नोट: समानांतरवाद GPU तक सीमित नहीं है।


संगामिति

एक वेब सेवा वास्तविक समय में कई छोटे अनुरोध प्राप्त करती है और इसे इनमें से प्रत्येक अनुरोध को किसी भी समय, और अन्य अनुरोधों या किसी भी आंतरिक कार्य से स्वतंत्र करने की आवश्यकता होती है। फिर भी आप चाहते हैं कि वेब सेवा डेटा की स्थिति या सिस्टम स्वास्थ्य को दूषित किए बिना हर समय ऊपर-नीचे हो।

बस एक रिकॉर्ड को अपडेट करने वाले उपयोगकर्ता की कल्पना करें और एक ही समय में उसी रिकॉर्ड को हटाने वाला एक अन्य उपयोगकर्ता।

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

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


अतुल्यकालिक

एक भारी प्रक्रिया (जैसे I / O ऑपरेशन) आसानी से GUI को ब्लॉक कर सकती है अगर वह GUI थ्रेड पर चलाया जाता है। UI जवाबदेही की गारंटी देने के लिए , एक भारी प्रक्रिया को अतुल्यकालिक रूप से निष्पादित किया जा सकता है। एक बार में एक ही एसिंक्स ऑपरेशंस चलाना बेहतर है । उदाहरण के लिए, एक ही समय में कई IO- बाउंड ऑपरेशन को धीमा किया जा सकता है, इसलिए उन्हें शुरू करने के लिए समाप्त करने के लिए उन्हें कतार में रखना बेहतर है

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

नोट: एक एसिंक्स ऑपरेशन जिसे समवर्ती रूप से निष्पादित किया जाता है (यानी एक बार में एक से अधिक बार) एक समवर्ती ऑपरेशन होता है।


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

*ध्यान दें: एसिंक्रोनस और मल्टीथ्रेडिंग अक्सर एक-दूसरे के साथ भ्रमित होते हैं। एसिंक्रोनस कोड आवश्यक रूप से एक नया धागा शामिल नहीं है। यह हार्डवेयर ऑपरेशन हो सकता है या स्टीफन इसे एक शुद्ध ऑपरेशन कहता है, इसे पढ़ें

नीचे दिए गए WPF + C # कोड में, await Task.Run(()=> HeavyMethod(txt))एक समकालिक समस्या textBox.Dispatcher.Invokeको हल कर रहा है , जबकि एक संगामिति समस्या को हल कर रहा है:

private async void ButtonClick(object sender, RoutedEventArgs e)
{
    // run a method in another thread
    await Task.Run(()=> HeavyMethod(txt));

    // modify UI object in UI thread
    txt.Text = "done";
}

// This is a thread-safe method. You can run it in any thread
internal void HeavyMethod(TextBox textBox)
{
    while (stillWorking)
    {
        // use Dispatcher to safely invoke UI operations
        textBox.Dispatcher.Invoke(() =>
        {
            // UI operations outside of invoke will cause ThreadException
            textBox.Text += ".";
        });
    }
}

0

मैं इन अवधारणाओं के चारों ओर अपना सिर लपेटने के लिए इसे छोटा और दिलचस्प बनाने जा रहा हूं।

समवर्ती बनाम समानांतर - तरीके कार्य निष्पादित किए जाते हैं।

वास्तविक जीवन में एक उदाहरण लें: एक चुनौती है जो आपको दोनों को एक विशाल केक खाने और एक पूरे गीत को गाने की आवश्यकता है। यदि आप सबसे तेज़ हैं जो पूरे गाने को गाते हैं और केक खत्म करते हैं तो आप जीतेंगे। तो नियम यह है कि आप गाएं और समवर्ती खाएं । आप ऐसा कैसे करते हैं जो नियम से संबंधित नहीं है। आप पूरा केक खा सकते हैं, फिर पूरा गाना गा सकते हैं, या आप आधा केक खा सकते हैं, फिर आधा गाना गा सकते हैं, फिर फिर से गा सकते हैं, आदि।

समानांतरवाद एक विशेष प्रकार की संगामिति है जहाँ कार्य वास्तव में एक साथ निष्पादित होते हैं। कंप्यूटर विज्ञान में, समानताएं केवल मल्टीकोर वातावरण में प्राप्त की जा सकती हैं।

सिंक्रोनस बनाम एसिंक्रोनस - प्रोग्रामिंग मॉडल।

सिंक में, आप कोड को चरणों के रूप में लिखते हैं जो क्रम से निष्पादित होते हैं, ऊपर से नीचे तक। एक async प्रोग्रामिंग मॉडल में, आप कोड को कार्यों के रूप में लिखते हैं, जिसे तब समवर्ती रूप से निष्पादित किया जाता है। समवर्ती रूप से निष्पादित करने का मतलब है कि सभी कार्यों को एक ही समय में निष्पादित किए जाने की संभावना है।

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