2009-03-18 12 views
13

मैं समझता हूँ के रूप में, विंडोज़ धागा अनुसूचक भेदभाव नहीं करता है beween दो अलग अलग प्रक्रियाओं संबंधित सूत्र, उन सभी को एक ही आधार प्राथमिकता दी जाती है प्रदान की है। मेरा सवाल यह है कि यदि मेरे पास दो अनुप्रयोग हैं जिनमें केवल एक थ्रेड है और दूसरा 50 आधार धागे को समान आधार प्राथमिकता के साथ कहता है, तो क्या इसका मतलब यह है कि दूसरी प्रक्रिया में अधिक CPU समय का आनंद मिलता है तो पहले वाला?Win32 धागा शेड्यूलिंग

+0

और यदि एक आवेदन में 50 प्रक्रियाएं हैं और दूसरे के पास केवल एक है। क्या पहले एप्लिकेशन को अधिक CPU समय मिलना चाहिए? –

उत्तर

2

कि धागे के व्यवहार पर निर्भर करता है। आम तौर पर थ्रेड गिनती में 50: 1 अंतर के साथ, हां, अधिक थ्रेड वाले एप्लिकेशन को बहुत अधिक समय मिल जाएगा। हालांकि, खिड़कियां गतिशील थ्रेड प्राथमिकता का भी उपयोग करती हैं, जो इसे कुछ हद तक बदल सकती है। गतिशील धागा प्राथमिकता यहाँ वर्णित है:

http://support.microsoft.com/kb/109228

प्रासंगिक अंश:

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

3

शेड्यूलिंग की इकाई एक धागा, नहीं एक प्रक्रिया है, इसलिए 50 धागे के साथ एक प्रक्रिया है, एक तंग पाश में सभी,, केवल एक ही धागे के साथ एक प्रक्रिया से सीपीयू की भी बहुत कुछ मिल जाएगा प्रदान की गयी सभी कर रहे हैं एक ही प्राथमिकता पर चल रहा है। यह आमतौर पर चिंता का विषय नहीं है क्योंकि सिस्टम में अधिकांश थ्रेड एक चलने योग्य स्थिति में नहीं हैं और शेड्यूलिंग के लिए नहीं होंगे; वे आई/ओ पर इंतजार कर रहे हैं, उपयोगकर्ता से इनपुट की प्रतीक्षा कर रहे हैं, और इसी तरह।

विंडोज Internals विंडोज धागा अनुसूचक के बारे में जानने के लिए एक महान किताब है।

9

विंडोज़ में शेड्यूलिंग थ्रेड ग्रैन्युलरिटी पर शेड्यूलिंग है। इस दृष्टिकोण के पीछे मूल विचार यह है कि प्रक्रियाएं नहीं चलती हैं बल्कि केवल संसाधन और संदर्भ प्रदान करती हैं जिसमें उनके धागे चलते हैं। आपके प्रश्न पर वापस आना, क्योंकि शेड्यूलिंग निर्णय सख्ती से धागे के आधार पर किए जाते हैं, थ्रेड से संबंधित प्रक्रिया को कोई विचार नहीं दिया जाता है। आपके उदाहरण में, यदि प्रक्रिया ए में 1 रननेबल थ्रेड है और प्रक्रिया बी में 50 रननेबल थ्रेड हैं, और सभी 51 थ्रेड समान प्राथमिकता पर हैं, तो प्रत्येक थ्रेड को CPU समय के 1/51 प्राप्त होंगे- विंडोज 50 प्रतिशत नहीं देगा बी को संसाधित करने के लिए सीपीयू ए और 50 प्रतिशत को संसाधित करने के लिए। थ्रेड-शेड्यूलिंग एल्गोरिदम को समझने के लिए, आपको पहले प्राथमिकता स्तरों को समझना चाहिए जो विंडोज का उपयोग करता है। त्वरित संदर्भ के लिए आप यहां refer कर सकते हैं। गहरी समझ के लिए

कोशिश पढ़ने Windows Internals

+0

जानकारी यहां भी है: http://msdn.microsoft.com/en-us/library/ms810029.aspx#irql_sched_topic5 – Mehrdad

+0

तो यह कहना उचित है कि विंडो थ्रेड शेड्यूलर 'मेला' एल्गोरिदम का उपयोग करता है उदा। समान प्राथमिकता वाले सभी धागे समान रूप से निर्धारित होने की संभावना है? यदि हां, तो समान प्राथमिकता स्तर धागे के लिए, जिसे पहले निर्धारित किया गया है? आदेश यादृच्छिक है या यह किसी भी तरह से निर्धारक है? – stt106

5

उपरोक्त सभी सही हैं, लेकिन यदि आप 50 धागा प्रक्रिया सभी सीपीयू का अकेले बारे में चिंतित हैं, वहाँ तकनीक आप यह सुनिश्चित करें कि कोई भी प्रक्रिया सीपीयू अभिभूत कर सकते हैं।

IMHO ऐसा करने का सबसे अच्छा तरीका है प्रक्रिया के उपयोग को प्रबंधित करने के लिए job objects का उपयोग करना। सबसे पहले CreateJobObject, तो SetInformationJobObject काम वस्तु में प्रक्रियाओं की अधिकतम CPU उपयोग को सीमित करने के लिए कॉल और AssignProcessToJobObject काम वस्तु के लिए 50 धागे के साथ प्रक्रिया आवंटित करने के लिए। फिर आप ओएस को यह सुनिश्चित कर सकते हैं कि 50 थ्रेड प्रक्रिया बहुत अधिक CPU समय का उपभोग नहीं करती है।

+0

यदि अंतिम उपयोगकर्ताओं द्वारा उपयोग करने योग्य उपकरण के लिए उपकरण थे, तो यह विंडोज के लिए एक बड़ी जीत होगी। –

+0

वहाँ हैं, तरह के। कार्य प्रबंधक प्रारंभ करें, प्रक्रिया पर राइट क्लिक करें और "एफ़िनिटी सेट करें" का चयन करें। यह आपको विशिष्ट CPUs को अलग-अलग थ्रेड निर्दिष्ट करने की अनुमति देता है। यह बिल्कुल वही बात नहीं है लेकिन यह करीब है। –

0

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

जैसा कि उपयोगकर्ता द्वारा सेट किया जा सकता है टार्ज मशीन पर, ऐसा लगता है कि यह इस सेटिंग पर निर्भर रहने के लिए दुःख मांग रहा है ...