2008-08-31 11 views
10

.NET या Java में कोई थ्रेड या प्रक्रिया लॉन्च करते समय, यह चुनने का कोई तरीका है कि कौन सा प्रोसेसर या कोर लॉन्च किया गया है? साझा मामलों का मॉडल ऐसे मामलों में कैसे काम करता है?कोई एप्लिकेशन .NET या Java में एकाधिक कोर या CPU का उपयोग कैसे कर सकता है?

उत्तर

5

यदि आप एकाधिक धागे का उपयोग कर रहे हैं, तो ऑपरेटिंग सिस्टम स्वचालित रूप से एकाधिक कोर का उपयोग करने का ख्याल रखेगा।

+2

क्या आप इसे उद्धृत कर सकते हैं? आपको यह सूचना कहां मिली। –

+5

@ जोश ब्राउन, यह सामान्य ज्ञान की तरह लगता है। संदर्भ के लिए, Win32 API पर मौजूद कोई भी पुस्तक जो थ्रेड से संबंधित है, आपको यह बताएगी। –

1

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

कहा जा रहा है कि यदि आपके पास कोई महत्वपूर्ण कार्य है, तो आप थ्रेड प्राथमिकताओं को सेट कर सकते हैं, और थ्रेडिंग एपीआई आमतौर पर यह संभावना प्रदान करता है। उदाहरण के लिए जावा एपीआई देखें: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html#setPriority(int)

पुनश्च: वहाँ कुछ पार्स इंजन में टूट गया है ... मैं सादा पाठ के रूप में ऊपर लिंक जोड़ने के लिए किया था

4

वहाँ जो प्रोसेसर या कोर का चयन करने के लिए एक रास्ता है यह लॉन्च किया गया है?

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

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

अगर मुझे सही याद आती है, तो आपकी प्रक्रिया चलने के बाद विंडोज़ इन सेटिंग्स को याद रखेगी, लेकिन कृपया मुझे उस पर उद्धरण न दें कुछ स्वयं परीक्षण करते हैं :-)

System.Diagnostics.Process.ProcessorAffinity संपत्ति का उपयोग करके अपने प्रोग्राम लॉन्च होने के बाद भी आप प्रोग्रामिंग में .NET में ऐसा कर सकते हैं, लेकिन मुझे नहीं लगता कि यह सेटिंग्स को याद रखेगा, इसलिए हमेशा एक छोटी अवधि जिसमें आपका ऐप चलाया जाता है, जो भी सीपीयू विंडोज फिट बैठता है। मुझे नहीं पता कि जावा माफ में ऐसा कैसे करें।

नोट:

यह पूरे प्रक्रिया स्तर पर लागू होता है। यदि आप केवल CPU0 के लिए एफ़िनिटी सेट करते हैं, और फिर 50 थ्रेड लॉन्च करते हैं, तो उन सभी 50 थ्रेड CPU0 पर चलेंगे, और CPU1, 2, 3, आदि कुछ भी नहीं कर पाएंगे।

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


'साझा स्मृति' मॉडल के रूप में, यह एक ही काम करता है, लेकिन वहाँ अधिक चीजों को आसानी से गलत हो सकता है कि अपने ऐप के विपरीत सिर्फ एक एक पर timeslices करने के लिए कई CPU के पर चल रहा है कर रहे हैं।

एक आंख खोलने के उदाहरण के लिए, this ridiculousfish article about CPU's and Memory Barriers पढ़ें।

इसका उद्देश्य पावरपीसी पर ओएसएक्स विकास का लक्ष्य है, लेकिन सामान्य है कि इसे हर जगह लागू होना चाहिए। आईएमएचओ यह शीर्ष दस में से एक है 'सभी डेवलपर्स को यह पढ़ना चाहिए' लेख मैंने पढ़ा है।

0

मैंने इसे दो कार्यक्रमों में उपयोग किया है क्योंकि मेरा कोर 0 गड़बड़ था।

// Programmatically set process affinity 
var process = System.Diagnostics.Process.GetCurrentProcess(); 

// Set Core 0 
process.ProcessorAffinity = new IntPtr(0x0001); 

या

// Set Core 1 
process.ProcessorAffinity = new IntPtr(0x0002); 

इस पर अधिक "Process.ProcessorAffinity Property" में।

0

मैं .NET ढांचे के समानांतर एक्सटेंशन पर एक नज़र डालेगा। यह अभी भी CTP में है, हालांकि इसे बहु कोर प्रोसेसर का सबसे अच्छा उपयोग करना चाहिए। .NET के लिए प्रारंभ करने का सबसे आसान स्थान parallel teams blog पर है।

जावा के लिए मुझे कोई जानकारी नहीं है।

संबंधित मुद्दे

 संबंधित मुद्दे