अलग-अलग थ्रेड्स पर समरूपता सम्मिलित दो कार्य चल रहे हैं। हालांकि, अतुल्यकालिक तरीके समानांतर में चलते हैं लेकिन एक ही 1 धागे पर। यह कैसे प्राप्त किया जाता है? इसके अलावा, समानता के बारे में क्या?
इन 3 अवधारणाओं के बीच अंतर क्या हैं?
अलग-अलग थ्रेड्स पर समरूपता सम्मिलित दो कार्य चल रहे हैं। हालांकि, अतुल्यकालिक तरीके समानांतर में चलते हैं लेकिन एक ही 1 धागे पर। यह कैसे प्राप्त किया जाता है? इसके अलावा, समानता के बारे में क्या?
इन 3 अवधारणाओं के बीच अंतर क्या हैं?
जवाबों:
समवर्ती और समानांतर प्रभावी रूप से एक ही सिद्धांत है जैसा कि आप सही ढंग से सही करते हैं, दोनों एक साथ निष्पादित किए जाने वाले कार्यों से संबंधित हैं, हालांकि मैं कहूंगा कि समानांतर कार्यों को वास्तव में "एक ही समय में निष्पादित" किया जाना चाहिए, जबकि समवर्ती का मतलब हो सकता है कि कार्य साझा कर रहे हैं। निष्पादन धागा, जबकि अभी भी समानांतर में निष्पादित हो रहा है।
अतुल्यकालिक तरीके सीधे पिछले दो अवधारणाओं से संबंधित नहीं हैं, अतुल्यकालिक का उपयोग समवर्ती या समानांतर टास्किंग की छाप पेश करने के लिए किया जाता है लेकिन प्रभावी रूप से एक अतुल्यकालिक विधि कॉल का उपयोग आमतौर पर एक प्रक्रिया के लिए किया जाता है जिसे वर्तमान एप्लिकेशन से दूर काम करने की आवश्यकता होती है और हम डॉन प्रतिक्रिया की प्रतीक्षा कर रहे हमारे आवेदन को प्रतीक्षा और अवरुद्ध नहीं करना चाहते।
उदाहरण के लिए, डेटाबेस से डेटा प्राप्त करने में समय लग सकता है लेकिन हम डेटा के लिए अपने यूआई को अवरुद्ध नहीं करना चाहते हैं। Async कॉल कॉल-बैक संदर्भ लेता है और जैसे ही रिमोट सिस्टम के साथ अनुरोध रखा गया है, आपके कोड पर वापस निष्पादन लौटाता है। आपका यूआई उपयोगकर्ता को जवाब देना जारी रख सकता है जबकि दूरस्थ प्रणाली जो भी प्रसंस्करण की आवश्यकता होती है, एक बार जब वह आपके कॉल-बैक विधि में डेटा लौटाता है तो वह विधि यूआई (या उस अद्यतन को अपडेट) को उपयुक्त के रूप में अपडेट कर सकती है।
उपयोगकर्ता के दृष्टिकोण से, यह मल्टीटास्किंग की तरह प्रतीत होता है लेकिन यह नहीं हो सकता है।
संपादित करें
यह संभवतः जोड़ने योग्य है कि कई कार्यान्वयन में एक अतुल्यकालिक विधि कॉल के कारण एक थ्रेड को उगल दिया जाएगा, लेकिन यह आवश्यक नहीं है, यह वास्तव में निष्पादित होने वाले ऑपरेशन पर निर्भर करता है और प्रतिक्रिया को सिस्टम में कैसे अधिसूचित किया जा सकता है।
संक्षेप में,
Concurrency का अर्थ है ऐसे कई कार्य जो बिना किसी विशेष क्रम के ओवरलैपिंग समयावधि में शुरू, चलते और पूर्ण होते हैं। समानांतरवाद तब होता है जब एक ही समय में बहु-कोर प्रोसेसर पर कई कार्य या एक अद्वितीय कार्य के कई भाग एक ही समय में चलते हैं, जैसे।
याद रखें कि समरूपता और समानतावाद एक ही बात नहीं है।
समरूपता बनाम समानतावाद के बीच अंतर
अब संक्षिप्तता और समानता के बीच उल्लेखनीय अंतरों को सूचीबद्ध करते हैं।
समसामयिकता तब होती है जब दो कार्य ओवरलैपिंग समयावधि में शुरू हो सकते हैं, चल सकते हैं, और पूरे हो सकते हैं। समानांतरवाद तब होता है जब कार्य शाब्दिक रूप से एक ही समय में चलते हैं, जैसे। मल्टी-कोर प्रोसेसर पर।
समरूपता स्वतंत्र रूप से निष्पादित प्रक्रियाओं की संरचना है, जबकि समानता (संभवतः संबंधित) संगणना का एक साथ निष्पादन है।
कॉनक्यूरेन्सी एक साथ बहुत सारी चीजों से निपटने के बारे में है। समानांतरवाद एक ही बार में बहुत सारी चीजें करने के बारे में है।
एक अनुप्रयोग समवर्ती हो सकता है - लेकिन समानांतर नहीं, जिसका अर्थ है कि यह एक ही समय में एक से अधिक कार्य करता है, लेकिन एक ही समय में कोई भी दो कार्य निष्पादित नहीं होते हैं।
एक अनुप्रयोग समानांतर हो सकता है - लेकिन समवर्ती नहीं, जिसका अर्थ है कि यह एक ही समय में मल्टी-कोर सीपीयू में एक कार्य के कई उप-कार्यों को संसाधित करता है।
एक एप्लिकेशन न तो समानांतर हो सकता है - न ही समवर्ती, जिसका अर्थ है कि यह एक समय में सभी कार्यों को क्रमिक रूप से संसाधित करता है।
एक अनुप्रयोग समानांतर - और समवर्ती दोनों हो सकता है, जिसका अर्थ है कि यह एक ही समय में मल्टी-कोर सीपीयू में कई कार्यों को समवर्ती रूप से संसाधित करता है।
संगामिति
जब हम न्यूनतम दो कार्यों या उससे अधिक के बारे में बात करते हैं, तो संगाम्यता अनिवार्य रूप से लागू होती है जब कोई एप्लिकेशन लगभग एक ही समय में दो कार्यों को निष्पादित करने में सक्षम होता है, तो हम इसे समवर्ती अनुप्रयोग कहते हैं। हालांकि यहां कार्य एक साथ चलते हैं, लेकिन अनिवार्य रूप से वे MAY नहीं हैं। वे ऑपरेटिंग सिस्टम के सीपीयू टाइम-स्लाइसिंग सुविधा का लाभ उठाते हैं जहां प्रत्येक कार्य अपने कार्य का हिस्सा होता है और फिर प्रतीक्षा स्थिति में जाता है। जब पहला कार्य प्रतीक्षा की स्थिति में होता है, तो इसे कार्य का हिस्सा पूरा करने के लिए CPU को दूसरा कार्य सौंपा जाता है।
इस प्रकार कार्यों की प्राथमिकता के आधार पर ऑपरेटिंग सिस्टम, सीपीयू और अन्य कंप्यूटिंग संसाधनों जैसे कि मेमोरी; सभी कार्यों को बारी-बारी से करें और उन्हें पूरा करने का मौका दें। उपयोगकर्ता को समाप्त करने के लिए, ऐसा लगता है कि सभी कार्य समानांतर में चल रहे हैं। इसे कंसीलर कहा जाता है।
समानता
समानांतरवाद को अस्तित्व में दो कार्यों की आवश्यकता नहीं है। यह वास्तव में सीपीयू के मल्टी-कोर इंफ्रास्ट्रक्चर का उपयोग करते हुए प्रत्येक कार्य या उप-कार्य को एक ही समय पर करने के साथ, शारीरिक रूप से कार्यों या कई कार्यों के कुछ हिस्सों को चलाता है।
समानांतरता को आवश्यक रूप से कई प्रसंस्करण इकाइयों के साथ हार्डवेयर की आवश्यकता होती है। सिंगल कोर सीपीयू में, आप समवर्ती हो सकते हैं लेकिन समानता नहीं।
अतुल्यकालिक तरीके
यह कॉनक्यूरेन्सी और समानांतरवाद से संबंधित नहीं है, अतुल्यकालिक का उपयोग समवर्ती या समानांतर टास्किंग की छाप पेश करने के लिए किया जाता है लेकिन प्रभावी रूप से एक अतुल्यकालिक विधि कॉल का उपयोग आमतौर पर एक प्रक्रिया के लिए किया जाता है जिसे वर्तमान एप्लिकेशन से दूर काम करने की आवश्यकता होती है और हम चाहते हैं। प्रतीक्षा करें और प्रतिक्रिया का इंतजार करते हुए हमारे आवेदन को अवरुद्ध करें।
कंसीडर तब होता है जब प्रत्येक कार्य को एक के बाद एक क्रमबद्ध रूप से निष्पादित करने के बजाय कई कार्यों का निष्पादन होता है।
समानांतरवाद तब है जब इन कार्यों को वास्तव में समानांतर में निष्पादित किया जा रहा है।
अतुल्यकालिक एक अलग अवधारणा है (भले ही कुछ संदर्भों में संबंधित हो)। यह इस तथ्य को संदर्भित करता है कि एक घटना किसी अन्य घटना के लिए एक अलग समय पर हो सकती है (समकालिकता में नहीं)। नीचे दिए गए चित्र बताते हैं कि एक तुल्यकालिक और एक अतुल्यकालिक निष्पादन के बीच अंतर क्या है, जहां अभिनेता विभिन्न थ्रेड्स, प्रक्रियाओं या सर्वरों के अनुरूप हो सकते हैं।
हर किसी को अतुल्यकालिक या तो समानता या संगति से जुड़ने में परेशानी हो रही है क्योंकि अतुल्यकालिक या तो समानांतर या समवर्ती के लिए एक एंटोनॉम नहीं है। यह सिंक्रोनस का एनटोनियम है। जो सिर्फ इंगित करता है कि क्या कुछ है, इस मामले में धागे, कुछ और के साथ सिंक किया जाएगा, इस मामले में एक और धागा।
ऐसे कई परिदृश्य हैं जिनमें संगामिति हो सकती है:
अतुल्यकालिक - इसका मतलब है कि आपका कार्यक्रम गैर-अवरुद्ध संचालन करता है। उदाहरण के लिए, यह HTTP के माध्यम से एक दूरस्थ संसाधन के लिए अनुरोध शुरू कर सकता है और फिर कुछ अन्य कार्य करने के लिए आगे बढ़ सकता है जबकि यह प्राप्त होने वाली प्रतिक्रिया का इंतजार करता है। जब आप ईमेल भेजते हैं तो यह थोड़ा सा होता है और फिर प्रतिक्रिया का इंतजार किए बिना अपने जीवन के साथ चलते हैं।
समानांतरवाद - इसका अर्थ है कि आपका कार्यक्रम एक ही समय में कार्यों को निष्पादित करने के लिए कार्यों को निष्पादित करने के लिए मल्टी-कोर मशीनों के हार्डवेयर का लाभ उठाता है, जिनमें से प्रत्येक को एक अलग कोर पर निष्पादित किया जाता है। यह शॉवर में गाने जैसा है: आप वास्तव में एक ही समय में दो काम कर रहे हैं।
मल्टीथ्रेडिंग - यह एक सॉफ्टवेयर कार्यान्वयन है जो विभिन्न थ्रेड्स को समवर्ती रूप से निष्पादित करने की अनुमति देता है। एक मल्टीथ्रेड प्रोग्राम एक ही-कोर मशीन पर चलने पर भी एक ही समय में कई काम करता प्रतीत होता है। यह थोड़ा सा है जैसे विभिन्न IM विंडो के माध्यम से विभिन्न लोगों के साथ चैट करना; यद्यपि आप वास्तव में आगे और पीछे स्विच कर रहे हैं, शुद्ध परिणाम यह है कि आप एक ही समय में कई वार्तालाप कर रहे हैं।
संगामिति
Concurrency का अर्थ है कि एक अनुप्रयोग एक ही समय में (समवर्ती) एक से अधिक कार्य पर प्रगति कर रहा है। ठीक है, अगर कंप्यूटर में केवल एक ही सीपीयू है, तो एप्लिकेशन एक ही समय में एक से अधिक कार्य पर प्रगति नहीं कर सकता है, लेकिन एप्लिकेशन के अंदर एक समय में एक से अधिक कार्य संसाधित किए जा रहे हैं। अगले कार्य को शुरू करने से पहले यह एक कार्य को पूरी तरह से समाप्त नहीं करता है।
समानता
समानांतरवाद का अर्थ है कि एक अनुप्रयोग अपने कार्यों को छोटे उप-प्रकारों में विभाजित करता है जिन्हें समानांतर में संसाधित किया जा सकता है, उदाहरण के लिए एक ही समय में कई सीपीयू पर।
कॉनकरेन्सी बनाम पैरेलिज्म इन डिटेल
जैसा कि आप देख सकते हैं, कि कैसे एक आवेदन कई कार्यों को संभालता है, से संबंधित है। एक अनुप्रयोग एक समय में एक कार्य (क्रमिक रूप से) या एक ही समय में (समवर्ती) कई कार्यों पर काम कर सकता है।
दूसरी ओर समानांतरता, इस बात से संबंधित है कि कोई एप्लिकेशन प्रत्येक व्यक्तिगत कार्य को कैसे संभालता है। कोई अनुप्रयोग कार्य को प्रारंभ से अंत तक क्रमिक रूप से संसाधित कर सकता है, या कार्य को उप-प्रकारों में विभाजित कर सकता है जिसे समानांतर में पूरा किया जा सकता है।
जैसा कि आप देख सकते हैं, एक आवेदन समवर्ती हो सकता है, लेकिन समानांतर नहीं। इसका मतलब यह है कि यह एक ही समय में एक से अधिक कार्य करता है, लेकिन कार्य उप-प्रकारों में विभाजित नहीं होते हैं।
एक आवेदन भी समानांतर हो सकता है लेकिन समवर्ती नहीं। इसका मतलब यह है कि आवेदन केवल एक समय में एक कार्य पर काम करता है, और यह कार्य उप-प्रकारों में टूट जाता है जिसे समानांतर में संसाधित किया जा सकता है।
इसके अतिरिक्त, एक आवेदन न तो समवर्ती और न ही समानांतर हो सकता है। इसका मतलब है कि यह एक समय में केवल एक कार्य पर काम करता है, और समानांतर निष्पादन के लिए कार्य कभी भी उप-प्रकारों में टूट नहीं जाता है।
अंत में, एक आवेदन समवर्ती और समानांतर दोनों हो सकता है, जिसमें यह दोनों एक ही समय में कई कार्यों पर काम करता है, और समानांतर निष्पादन के लिए प्रत्येक कार्य को उप-कार्य में भी तोड़ता है। हालाँकि, इस परिदृश्य में समवर्ती और समानांतरवाद के कुछ लाभ खो सकते हैं, क्योंकि कंप्यूटर में सीपीयू पहले से ही या तो समवर्ती या समानांतरवाद के साथ यथोचित रूप से व्यस्त हैं। इसे संयोजित करने से केवल एक छोटा प्रदर्शन लाभ या प्रदर्शन हानि हो सकती है। सुनिश्चित करें कि आप एक समवर्ती समानांतर मॉडल को नेत्रहीन रूप से अपनाने से पहले विश्लेषण और माप करते हैं।
से http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html
समानांतर:यह एक व्यापक शब्द है जिसका अर्थ है कि कोड के दो टुकड़े "एक ही समय में" निष्पादित करते हैं। इससे कोई फर्क नहीं पड़ता कि यह "वास्तविक" समानता है या यदि यह कुछ चालाक डिजाइन पैटर्न के माध्यम से नकली है। मुद्दा यह है कि आप एक ही समय में "कार्य" शुरू कर सकते हैं और फिर उन्हें अलग से नियंत्रित कर सकते हैं (म्यूटेक्स और सभी उपयुक्त चाल के साथ)। लेकिन आमतौर पर आप "समानांतर" शब्द का उपयोग केवल "सही" समानता के लिए करना पसंद करते हैं, जैसे: आप इसे गैर-सहकारी मल्टीटास्किंग के माध्यम से करते हैं (चाहे थ्रेड सीपीयू / जीपीयू कोर हो, या केवल सॉफ्टवेयर स्तर पर ओएस को इसे प्रबंधित करने की अनुमति देकर। बहुत निचले स्तर पर)। लोग केवल समानांतर अनुक्रमिक कोड के लिए "समानांतर" कहने के लिए अनिच्छुक हैं, जो समानांतरवाद को फेकता है, जैसे आपको ब्राउज़र विंडो की जावास्क्रिप्ट में उदाहरण के लिए मिलेगा। इसलिए इस सूत्र में लोगों का कहना है कि "अतुल्यकालिक का समानतावाद से कोई लेना-देना नहीं है"। ठीक है, लेकिन यह उन्हें भ्रमित नहीं करता है।
समवर्ती: समांतरवाद के बिना संगति नहीं हो सकती है (चाहे सिम्युलेटेड या वास्तविक, जैसा कि मैंने ऊपर बताया गया है), लेकिन यह शब्द विशेष रूप से इस तथ्य पर केंद्रित है कि दोनों प्रणालियां एक ही समय में एक ही संसाधन को किसी बिंदु पर एक्सेस करने का प्रयास करेंगी । यह इस तथ्य पर जोर डालता है कि आप इससे निपटने जा रहे हैं।
एसिंक्रोनस : हर कोई यह कह कर सही है कि एसिंक्रोनस समानता के साथ असंबंधित है, लेकिन यह इसके लिए मार्ग प्रशस्त करता है (बोझ आप पर है कि चीजों को समानांतर बनाया जाए या नहीं - पढ़ते रहें)।
"एसिंक्रोनस" समानांतरवाद के एक प्रतिनिधित्व को संदर्भित करता है जो आमतौर पर समानता में शामिल तीन बुनियादी चीजों को औपचारिक बनाता है: 1) कार्य के आरंभीकरण को परिभाषित करें (कहो कि यह कब शुरू होता है और क्या पैरामीटर मिलता है), 2) खत्म होने के बाद क्या करना चाहिए और 3) कोड को इनबेटवर्क करते रहना चाहिए।
लेकिन यह अभी भी केवल वाक्यविन्यास है (आमतौर पर इसे कॉलबैक विधियों के रूप में दर्शाया जाता है)। दृश्य के पीछे, अंतर्निहित प्रणाली बस यह तय कर सकती है कि ये तथाकथित "कार्य" कोड के केवल टुकड़े हैं जब तक कि यह उस कोड को पूरा नहीं करता है जो वर्तमान में निष्पादित हो रहा है। और फिर यह उन्हें एक-एक करके unpiles करता है और उन्हें क्रमिक रूप से निष्पादित करता है। या नहीं। यह प्रति कार्य एक धागा भी बना सकता है और उन्हें समानांतर में चला सकता है। किसे पड़ी है? वह हिस्सा अवधारणा में शामिल नहीं है;)
यहाँ स्पष्ट करने के लिए शब्दार्थ का एक सा है:
समरूपता या समानांतरवाद संसाधन विवाद का सवाल है , जबकि अतुल्यकालिक नियंत्रण प्रवाह के बारे में है ।
विभिन्न प्रक्रियाओं (या उनके घटक संचालन ) को अतुल्यकालिक कहा जाता है, जब उनके प्रसंस्करण के क्रम का कोई निर्धारक कार्यान्वयन नहीं होता है ; दूसरे शब्दों में, इस बात की संभावना है कि उनमें से किसी को किसी भी समय टी संसाधित किया जा सकता है। परिभाषा के अनुसार, कई प्रोसेसर (जैसे सीपीयू या व्यक्ति) उनमें से कई को एक ही समय में संसाधित करना संभव बनाते हैं; एकल प्रोसेसर पर, उनका प्रसंस्करण इंटरलीव्ड (जैसे थ्रेड्स) है।
अतुल्यकालिक प्रक्रियाओं या संचालन को समवर्ती कहा जाता है, जब वे संसाधनों को साझा करते हैं ; किसी भी समय T में विरोधाभास की निश्चित संभावना है। कोई संसाधन साझा नहीं किए जाने पर समानांतर रूप से गारंटी दी जाती है (जैसे विभिन्न प्रोसेसर और भंडारण); अन्यथा Concurrency नियंत्रण को संबोधित किया जाना चाहिए।
इसलिए एक अतुल्यकालिक प्रक्रिया या ऑपरेशन को समानांतर या समवर्ती रूप से दूसरों के साथ संसाधित किया जा सकता है।
कॉनक्यूरेन्सी का अर्थ है एक ही समय में कई कार्यों को अंजाम देना लेकिन एक साथ जरूरी नहीं। जब आपको एक से अधिक कार्य करने होते हैं, लेकिन आपके पास एक ही संसाधन होता है, तो हम समसामयिकी के लिए जाते हैं। सिंगल कोर एनवायरनमेंटल कॉन्सेप्ट कॉन्सेप्ट स्विचिंग द्वारा हासिल किया जाता है।
समानांतरवाद एक साथ एक से अधिक कार्य करने जैसा है जैसे आप गा सकते हैं और एक साथ स्नान कर सकते हैं। अब आप Parallel में कार्य कर रहे हैं।
एसिंक्रोनस एक ऐसी चीज है जो एसिंक्रोनस मॉडल में थ्रेड निष्पादन से संबंधित है जब एक कार्य निष्पादित हो जाता है, तो आप पिछले को पूरा करने के लिए इंतजार किए बिना एक अलग कार्य पर स्विच कर सकते हैं।
अतुल्यकालिक प्रोग्रामिंग हमें संगामिति प्राप्त करने में मदद करता है। एक बहु-थ्रेडेड वातावरण में एसिंक्रोनस प्रोग्रामिंग समानांतरवाद को प्राप्त करने का एक तरीका है।
"सिंक और एसिंक्स प्रोग्रामिंग मॉडल हैं। समवर्ती और समानांतर ऐसे तरीके हैं जिनसे कार्यों को निष्पादित किया जाता है ..."। स्रोत: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66
दूसरे शब्दों में, सिंक और एसिंक्स वर्णन करते हैं कि फ़ंक्शन कॉल करते समय आपका प्रोग्राम कैसे निष्पादित होता है (क्या यह प्रतीक्षा करेगा या क्या यह निष्पादित करना जारी रखेगा?), समवर्ती और समानांतर का वर्णन करते हैं कि कैसे एक फ़ंक्शन (कार्य) निष्पादित किया जाएगा (समवर्ती = संभवतः निष्पादित)। एक ही समय, समानांतर = प्रभावी ढंग से एक ही समय में निष्पादित)।
यहाँ मैं कुछ उदाहरणों के साथ समझाता हूँ
एक GPU हजारों भौतिक और तार्किक थ्रेड्स पर कोड (AKA कर्नेल ) के समान ब्लॉक को संसाधित करने के लिए समानांतर प्रसंस्करण का उपयोग करता है । आदर्श रूप से, प्रक्रिया एक ही समय में सभी थ्रेड्स के लिए शुरू और समाप्त होती है। हाइपरथ्रेडिंग के बिना एक एकल CPU कोर समानांतर प्रसंस्करण नहीं कर सकता है।
नोट: मैंने आदर्श रूप से कहा क्योंकि जब आप 6M थ्रेड्स के साथ हार्डवेयर पर 7M कॉल के आकार के साथ एक कर्नेल चलाते हैं, तो इसे सभी 6M थ्रेड पर समान रूप से सभी 6M थ्रेड का उपभोग करते हुए दो बार चलाना होता है।
नोट: समानांतरवाद GPU तक सीमित नहीं है।
एक वेब सेवा वास्तविक समय में कई छोटे अनुरोध प्राप्त करती है और इसे इनमें से प्रत्येक अनुरोध को किसी भी समय, और अन्य अनुरोधों या किसी भी आंतरिक कार्य से स्वतंत्र करने की आवश्यकता होती है। फिर भी आप चाहते हैं कि वेब सेवा डेटा की स्थिति या सिस्टम स्वास्थ्य को दूषित किए बिना हर समय ऊपर-नीचे हो।
बस एक रिकॉर्ड को अपडेट करने वाले उपयोगकर्ता की कल्पना करें और एक ही समय में उसी रिकॉर्ड को हटाने वाला एक अन्य उपयोगकर्ता।
नोट : ये अनुरोध आमतौर पर कुछ आवश्यक संसाधनों जैसे मेमोरी, डेटाबेस कनेक्शन या बैंडविड्थ का उपभोग करते हैं। फिर भी आप चाहते हैं कि वेब सेवा हर समय उत्तरदायी हो। अतुल्यकालिक इसे उत्तरदायी बनाने के लिए महत्वपूर्ण है , न कि संगामिति
एक भारी प्रक्रिया (जैसे I / O ऑपरेशन) आसानी से GUI को ब्लॉक कर सकती है अगर वह GUI थ्रेड पर चलाया जाता है। UI जवाबदेही की गारंटी देने के लिए , एक भारी प्रक्रिया को अतुल्यकालिक रूप से निष्पादित किया जा सकता है। एक बार में एक ही एसिंक्स ऑपरेशंस चलाना बेहतर है । उदाहरण के लिए, एक ही समय में कई IO- बाउंड ऑपरेशन को धीमा किया जा सकता है, इसलिए उन्हें शुरू करने के लिए समाप्त करने के लिए उन्हें कतार में रखना बेहतर है
नोट: एक एसिंक्स ऑपरेशन जिसे समवर्ती रूप से निष्पादित किया जाता है (यानी एक बार में एक से अधिक बार) एक समवर्ती ऑपरेशन होता है।
नोट: कंसिस्टेंसी और एसिंक्रोनस अक्सर एक-दूसरे के साथ भ्रमित होते हैं। कंसीडर सिस्टम के विभिन्न हिस्सों को संदर्भित करता है जो एक-दूसरे के साथ हस्तक्षेप किए बिना एक साथ काम कर रहे हैं (ये समस्या अक्सर ताले, सेमाफोर या म्यूटेक्स के साथ हल की जाती है)। एसिंक्रोनस यह है कि आप जवाबदेही कैसे हासिल करते हैं (जैसे थ्रेडिंग)।
*ध्यान दें: एसिंक्रोनस और मल्टीथ्रेडिंग अक्सर एक-दूसरे के साथ भ्रमित होते हैं। एसिंक्रोनस कोड आवश्यक रूप से एक नया धागा शामिल नहीं है। यह हार्डवेयर ऑपरेशन हो सकता है या स्टीफन इसे एक शुद्ध ऑपरेशन कहता है, इसे पढ़ें
नीचे दिए गए 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 += ".";
});
}
}
मैं इन अवधारणाओं के चारों ओर अपना सिर लपेटने के लिए इसे छोटा और दिलचस्प बनाने जा रहा हूं।
समवर्ती बनाम समानांतर - तरीके कार्य निष्पादित किए जाते हैं।
वास्तविक जीवन में एक उदाहरण लें: एक चुनौती है जो आपको दोनों को एक विशाल केक खाने और एक पूरे गीत को गाने की आवश्यकता है। यदि आप सबसे तेज़ हैं जो पूरे गाने को गाते हैं और केक खत्म करते हैं तो आप जीतेंगे। तो नियम यह है कि आप गाएं और समवर्ती खाएं । आप ऐसा कैसे करते हैं जो नियम से संबंधित नहीं है। आप पूरा केक खा सकते हैं, फिर पूरा गाना गा सकते हैं, या आप आधा केक खा सकते हैं, फिर आधा गाना गा सकते हैं, फिर फिर से गा सकते हैं, आदि।
समानांतरवाद एक विशेष प्रकार की संगामिति है जहाँ कार्य वास्तव में एक साथ निष्पादित होते हैं। कंप्यूटर विज्ञान में, समानताएं केवल मल्टीकोर वातावरण में प्राप्त की जा सकती हैं।
सिंक्रोनस बनाम एसिंक्रोनस - प्रोग्रामिंग मॉडल।
सिंक में, आप कोड को चरणों के रूप में लिखते हैं जो क्रम से निष्पादित होते हैं, ऊपर से नीचे तक। एक async प्रोग्रामिंग मॉडल में, आप कोड को कार्यों के रूप में लिखते हैं, जिसे तब समवर्ती रूप से निष्पादित किया जाता है। समवर्ती रूप से निष्पादित करने का मतलब है कि सभी कार्यों को एक ही समय में निष्पादित किए जाने की संभावना है।