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