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