2012-11-15 13 views
11

मैंने इसी विषय पर पिछली पोस्टिंग की खोज की लेकिन इस सवाल पूछने के बाद एक उचित उत्तर नहीं मिला। इसका उत्तर देने में आपकी सहायता की अत्यधिक सराहना की जाती है।जावा थ्रेड के सीपीयू कोर एफ़िनिटी कैसे सेट करें?

मैं लिनक्स में टास्कसेट कमांड द्वारा किसी विशेष CPU कोर को प्रक्रिया की एफ़िनिटी सेट करने के बारे में जानता हूं। लेकिन मैं जावा थ्रेड के एफ़िनिटी को एक विशेष सीपीयू कोर में सेट करना चाहता हूं ताकि एक ही प्रक्रिया से संबंधित अन्य थ्रेड सभी शेष कोरों पर चल सकें। उदाहरण के लिए यदि मेरे पास 4-कोर मशीन के साथ 10 धागे वाली प्रक्रिया है, तो मैं थ्रेड के लिए कोर -1 आरक्षित करना चाहता हूं और बाकी 3-कोर पर 9 धागे चलाना चाहूंगा। क्या यह किया जा सकता है और कैसे?

धन्यवाद सचिन

उत्तर

8

कहें 2241 आपकी जावा प्रक्रिया का ढक्कन है। रन:

jstack 2241 

यह आपको धागे की एक सूची देता है। वहां अपना खोजें और निड फ़ील्ड को नोट करें। जो आधार पर 10 2281. के रूप में फिर से चलाने के धर्मान्तरित एनआईडी = 0x8e9 कहो,:

taskset -p -c 0 2281 

हो गया।

7

दुर्भाग्य से, आप एक विशिष्ट कोर के लिए जावा धागे नहीं सौंप सकते। आप क्या कर सकते हैं, हालांकि, Thread Priorities

वैकल्पिक रूप से धागे (यह सोचते हैं कि यह इसी कार्य को पूरा होगा) को प्राथमिकता देने में आप JNI इस्तेमाल कर सकते हैं, लेकिन यह पूरी तरह से overkill होगा सेट है।

+0

हाँ इसी तरह जावा हार्डवेयर स्वतंत्र नहीं होगा – Furtano

2

जावा एप्लिकेशन को याद रखें कि आपका चल रहा है वास्तव में एक जेवीएम में चल रहा है जो ओएस पर चल रहा है। आप सीधे सीपीयू के साथ बातचीत करने में सक्षम होने के लिए आपको निम्न स्तर की प्रोग्रामिंग भाषा (जैसे सी) की आवश्यकता होगी।

जैसा कि किसी अन्य उत्तर में सुझाव दिया गया है, आप जेएनआई का उपयोग निम्न स्तर की भाषा (जैसे सी) के साथ बातचीत करने के लिए कर सकते हैं जो आपको चाहिए, हालांकि आपको समेकन (उस निचले स्तर के लैंगग्यूज में प्रबंधित धागे) को प्रतिनिधि करना होगा ...

0

आप जेएनए का उपयोग करके सादे जावा में ऐसा कर सकते हैं। टास्कसेट का उपयोग करने की कोई आवश्यकता नहीं है। बस याद रखें कि थ्रेड एफ़िनिटी व्यर्थ है जब तक कि आपने पहले कर्नेल/उपयोगकर्ता थ्रेड और हार्डवेयर इंटरप्ट से कोर को अलग नहीं किया हो। मैं कोरल ब्लॉक्स से संबद्ध हूं जिसने CoralThreads विकसित किया है जो वास्तव में करता है।

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