मैं एक प्रक्रिया द्वारा अपने CPU प्रतिशत का उपयोग देख रहा हूं। कैसे एक प्रक्रिया केवल 50% CPU का उपयोग करती है? क्या कोई प्रक्रिया 100% तो 0%, फिर 100% का उपयोग नहीं करती है? हर दूसरे निर्देश की तरह इसका एक अलग कार्यक्रम नहीं है।
मैं एक प्रक्रिया द्वारा अपने CPU प्रतिशत का उपयोग देख रहा हूं। कैसे एक प्रक्रिया केवल 50% CPU का उपयोग करती है? क्या कोई प्रक्रिया 100% तो 0%, फिर 100% का उपयोग नहीं करती है? हर दूसरे निर्देश की तरह इसका एक अलग कार्यक्रम नहीं है।
जवाबों:
यह केवल प्रति सेकंड लगभग एक बार मतदान करता है। आप यह देख रहे हैं कि इसका उपयोग किया गया अंतिम दूसरा कितना है।
यदि आप थोड़ी देर के लिए 50% पर बैठे हुए सीपीयू को देखते हैं, तो संभावना है कि यह दोहरी सीपीयू प्रणाली में 100% एक सीपीयू का उपयोग कर रहा है।
तकनीकी रूप से आप सही हैं। किसी भी समय, CPU का उपयोग किया जा रहा है, या उपयोग नहीं किया जा रहा है। लेकिन यह प्रदर्शित करना कि किसी ग्राफ़ में बहुत मददगार नहीं होगा, इसलिए ग्राफ़ कुछ समय के लिए सीपीयू के उपयोग का औसत है, शायद प्रत्येक सेकंड में।
ओएस एक निश्चित समय अवधि के लिए प्रक्रिया को शेड्यूल करता है। इसलिए यदि प्रक्रिया 10ms में से 1ms के लिए निर्धारित (कह) है, तो यह 10% CPU का उपयोग करेगा।
यह थोड़ा उल्टा है, क्योंकि (एकल-थ्रेडेड, सिंगल-सीपीयू सिस्टम में), प्रक्रिया या तो चल रही है, या नहीं चल रही है। यानी यह 100% या 0% का उपयोग कर रहा है। आपके द्वारा देखा जाने वाला प्रतिशत एक समय विंडो पर मापा जाता है और चलाने के लिए आपकी प्रक्रिया के लिए समय स्लॉट आवंटित करने वाले ओएस का एक उपाय है।
ध्यान दें कि यदि आप I / O एक्सेस कर रहे हैं तो आपकी प्रक्रिया इसमें योगदान नहीं देगी। इसलिए यदि आप एक बड़ी गणना कर रहे हैं, तो आप 100% पंजीकरण करेंगे (यह मानते हुए कि कुछ और नहीं चलता)। यदि आप नेटवर्क पैकेट / डिस्क एक्सेस आदि का इंतजार करते हैं तो आपका सीपीयू फिगर नीचे चला जाएगा, इस तथ्य के बावजूद कि आपकी प्रक्रिया अभी भी चल रही है।
बहुत निचले स्तर पर, आप मूल रूप से सही हैं। किसी भी इंस्टेंट पर, प्रोसेसर या तो किसी दिए गए प्रोसेस के लिए एक निर्देश निष्पादित कर रहा है या यह नहीं है।
लेकिन आपका ओएस आपकी प्रक्रियाओं और प्रोसेसर के बीच में बैठा है, जिससे उन्हें समय साझा करना पड़ता है। आपके द्वारा देखा जाने वाला प्रतिशत हाल के प्रसंस्करण समय का प्रतिशत है जिसे OS ने वह प्रक्रिया दी है।
यह औसत समय पर आधारित है। सभी थ्रेड्स के बावजूद CPU समय (प्राथमिकता के आधार पर) का एक ही पार्सल हो सकता है, थ्रेड्स केवल "थैंक्स बट आइ एम आइडल" कह सकते हैं, और इसे अगले थ्रेड में बदल सकते हैं। यही कारण है कि प्रोग्राम हमेशा समान% समय का उपयोग नहीं कर रहे हैं, और अधिकांश प्रोग्राम 0% CPU का उपभोग कर रहे हैं, और जिन कार्यक्रमों को वास्तव में CPU की आवश्यकता है, वे अपने लिए 100% समय ले सकते हैं।
यह 50% पर कैपिंग क्यों है? आपके पास संभवतः दो सीपीयू कोर हैं, और केवल एक का उपयोग करके।
या, जैसा कि सुझाव दिया गया है, यह हाइपरथ्रेडिंग का उपयोग कर रहा है, लेकिन मुझे नहीं पता कि यह कैसे व्यवहार करता है।
सिस्टम का उपयोग नमूना और औसत है, जो करने के लिए केवल समझदार चीज है।
उदाहरण के लिए, 1 सेकंड के दौरान चलने वाली प्रक्रिया / थ्रेड को कितना समय रखा जाता है, इसका एक रिकॉर्ड रखा जाता है। यदि यह CPU पर 1 सेकंड खर्च करता है, तो यह 100% CPU (या यदि आपके पास 2 CPU और इतने पर 50% है), यदि यह 100ms खर्च करता है तो 10% CPU उपयोग है।