मैं नीचे से एक की तरह एक सरल एकल पिरोया प्रक्रिया को चलाने कहते हैं:कई प्रोसेसर/कोर पर एक थ्रेडेड प्रक्रिया क्यों निष्पादित होती है?
public class SirCountALot {
public static void main(String[] args) {
int count = 0;
while (true) {
count++;
}
}
}
(यह जावा है, क्योंकि मैं क्या कर रहा हूँ से परिचित है कि है, लेकिन मैं यह वास्तव में कोई फर्क नहीं पड़ता संदेह है)
मेरे पास एक आई 7 प्रोसेसर (4 कोर, या 8 हाइपरथ्रेडिंग गिनती है), और मैं विंडोज 7 64-बिट चला रहा हूं इसलिए मैंने सीपीयू उपयोग को देखने के लिए Sysinternals Process Explorer को निकाल दिया, और उम्मीद के अनुसार मुझे लगता है कि यह लगभग 20% सभी उपलब्ध सीपीयू के।
लेकिन जब मैं विकल्प को चालू सीपीयू प्रति 1 ग्राफ को दिखाने के लिए, मुझे लगता है कि 4 "कोर" के बजाय का 1 इस्तेमाल किया जा रहा सभी कोर से अधिक, CPU उपयोग फैला हुआ है:
इसके बजाय मैं अपेक्षा करता हूं कि 1 कोर अधिकतम हो गया है, लेकिन यह तब होता है जब मैं प्रक्रिया के लिए एक कोर को एफ़िनिटी सेट करता हूं।
क्यों काम का बोझ अलग कोर में बांटा गया है? कैशिंग के साथ कई कोर गड़बड़ पर वर्कलोड को विभाजित नहीं करना होगा या अन्य प्रदर्शन दंड लगाना होगा?
क्या यह एक कोर के अति ताप को रोकने के सामान्य कारण के लिए है? या क्या कोई गहरा कारण है?
संपादित करें: मुझे पता है कि ऑपरेटिंग सिस्टम शेड्यूलिंग के लिए ज़िम्मेदार है, लेकिन मैं जानना चाहता हूं कि यह "परेशान" क्यों है। निश्चित रूप से एक बेवकूफ दृष्टिकोण से, एक (ज्यादातर *) सिंगल-थ्रेडेड प्रक्रिया को 1 कोर पर चिपकाकर आसान & जाने का अधिक प्रभावी तरीका है?
* मैं ज्यादातर एकल पिरोया कई theads है क्योंकि यहाँ कहते हैं, लेकिन उनमें से 2 कुछ भी कर रहे हैं:
छोटे nitpick कोशिश कर के खिलाफ एक तर्क हो सकता है; यह कह रहा है कि यह एक थ्रेडेड प्रक्रिया सही नहीं होगी। JVM आंतरिक finalizers, कचरा कलेक्टरों आदि जैसे गृह व्यवस्था प्रयोजनों यह संभव है असली काम प्रत्येक थ्रेड से करवाने के लिए उस के लिए एक से अधिक थ्रेड spawns, JVM धागे डब्ल्यू धागे, जो फिर से प्रसार को स्पष्ट करने वाले असली ज पर मैप किए जाते /। –
मुझे लगता है कि कैस्पर का मतलब _non-daemon_ धागे था। – Santosh
@ SanjayT.Sharma हाँ, मैं एक छोटा सा सरलीकृत और शायद एक गैर-प्रबंधित भाषा में एक नमूना कार्यक्रम देना चाहिए;) हालांकि तरह मैंने कहा, मैं दृढ़ता से संदेह है कि यह JVM यह कर नहीं है (और अगर यह मानचित्रण है JVM? -> HW धागे और कहा कि जिम्मेदार है, यही कारण है कि मानचित्रण लगातार बदल रहा है) – Caspar