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