प्रक्रियाओं को प्राथमिकता देने से गति में सुधार क्यों नहीं होता है?


18

मुझे 2 एप्लिकेशन मिले हैं जो दोनों सिस्टम संसाधनों का बहुत उपयोग कर रहे हैं। जब मैं टास्क मैनेजर में एक की प्राथमिकता को कम करता हूं, तो दूसरे को बढ़ाते हुए, मैं उच्च प्राथमिकता वाले एप्लिकेशन में गति में कोई महत्वपूर्ण सुधार नहीं देखता हूं।

ऐसा क्यों है? क्या वहां कुछ और चल रहा है या कुछ और होने की जरूरत है?


6
यह वास्तविक जीवन की तरह है। यदि आपके पास किसी अन्य यात्री की तुलना में हवाई जहाज पर आने की उच्च प्राथमिकता है, तो इसका मतलब यह नहीं है कि उड़ान आपके लिए कम समय लेगी!
मेहरदाद

जवाबों:


28

प्राथमिकता तब मदद नहीं करती है जब टोंटी स्वयं CPU है। वास्तव में प्राथमिकता क्या है शेड्यूलिंग एल्गोरिदम को प्रभावित करता है ऑपरेटिंग सिस्टम यह निर्धारित करने के लिए उपयोग करता है कि कौन सी प्रक्रिया आगे चलती है क्योंकि प्रत्येक प्रक्रिया को लगातार चलाने के लिए अधिकांश सिस्टम में पर्याप्त प्रोसेसर नहीं हैं।

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


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

4

प्राथमिकता CPU समय है। क्या सभी कोर का हर समय 100% उपयोग किया जा रहा है? यदि नहीं, तो प्राथमिकता का कोई प्रभाव नहीं होगा। अक्सर सीपीयू अड़चन नहीं है, और यह मेमोरी, डिस्क, या GPU संसाधन है।


3

प्राथमिकता केवल तब होती है जब उपलब्ध सीपीयू कोर की तुलना में अधिक चलने योग्य धागे होते हैं। जब ऐसा होता है, प्राथमिकता नियंत्रण जो धागे को चलाने के लिए मिलता है। अधिकांश प्रणालियों में, सीपीयू पर किसी भी विवाद के लिए पर्याप्त गणना नहीं हो रही है: थ्रेड्स सभी अवरुद्ध हैं , कुछ होने की प्रतीक्षा कर रहे हैं। हो सकता है कि आपको कुछ टाइप करने के लिए, माउस को स्थानांतरित करने, स्क्रीन को छूने, या डिस्क से आने के लिए डेटा, नेटवर्क, आपके द्वारा प्लग किए गए किसी अन्य डिवाइस, या किसी अन्य थ्रेड के लिए किसी महत्वपूर्ण डेटा पर काम करने के लिए इंतजार करना पड़े। संरचना। यह डिस्क से पढ़े जाने वाले प्रोग्राम का कुछ हिस्सा हो सकता है या कुछ मेमोरी जिसे स्वैप किया गया था, वह स्पष्ट रूप से फाइल पढ़ने के बजाय वापस पढ़ने के लिए।

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

मल्टीकोर / मल्टीप्रोसेसर सिस्टम में, ऐसे प्रतिबंध हो सकते हैं जिन पर एक धागा चल सकता है। साथ ही, सिस्टम अपने आदर्श कोर पर और उनके NUMA नोड के भीतर थ्रेड रखने की कोशिश करता है ताकि थ्रेड का डेटा अभी भी उस कोर के कैश में हो और इसे बनाए गए डेटा तक तेजी से पहुंच हो। थ्रेड्स अभी भी गैर-आदर्श कोर पर चलाए जाएंगे यदि आगे चलाने के लिए कोई विकल्प नहीं है।

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

Windows Vista से पहले, थ्रेड प्राथमिकता पर कोई प्रभाव नहीं पड़ा कि मैंने कितनी जल्दी I / O ऑपरेशन पूरा किया। Windows Vista के बाद से, I / Os की प्राथमिकता भी हो सकती है, जो डिफ़ॉल्ट रूप से थ्रेड प्राथमिकता से आता है।

सारांश: जब तक आपका सीपीयू भारी रूप से लोड नहीं हो जाता है, तब तक आप मोटे तौर पर थ्रेड प्राथमिकताओं को बदलने का कोई प्रभाव नहीं देखेंगे, और फिर भी प्रभाव आमतौर पर न्यूनतम होगा। यदि प्रक्रिया को I / O की प्रतीक्षा करनी है या यह CPU समय के लिए अन्य प्रक्रियाओं के साथ संघर्ष नहीं कर रहा है, तो यह पहले से ही सबसे तेज़ चल रहा है और प्राथमिकता बदलकर इसे और तेज़ नहीं किया जा सकता है।


0

सामान्य तौर पर, प्रोग्राम को एक से अधिक सीपीयू (मल्टी-थ्रेडिंग जोड़कर) उपयोग करने के लिए अतिरिक्त प्रयास करना पड़ता है। इसलिए भले ही कार्यक्रम में सबसे अधिक उपलब्ध प्राथमिकता हो, यह केवल एक कोर का उपयोग कर सकता है।

अन्य संभावित मुद्दे:

  • कार्यक्रम अक्षम / खराब लिखा जा सकता है
  • यह "धीमी" डिस्क एक्सेस या धीमे नेटवर्क के कारण धीमा हो सकता है

0

यहां तक ​​कि I / O- बाउंड प्रक्रिया की I / O प्राथमिकता को बढ़ाने से जरूरी नहीं कि यह तेजी से चल सके। उदाहरण के लिए, यदि यह एक अलग, संभवतः दूरस्थ, प्रक्रिया द्वारा उत्पादित डेटा का उपभोक्ता है, और यह उस दर के साथ बना रहता है जिस पर वह स्रोत डेटा का उत्पादन करता है, तो यह तेजी से नहीं जा सकता है या उच्चतर थ्रूपुट है।

वर्तमान में स्वीकृत उत्तर ( /superuser//a/752587/322588 ) के पहले वाक्य में स्पष्ट रूप से जो कहा गया है, उसके विपरीत , प्राथमिकता में बदलाव सबसे प्रभावी होते हैं, जब सीपीयू अड़चन होती है, जैसा कि माइक मम्मिक के उत्तर में बताया गया है ( /superuser//a/752864/322588 )। इसके अलावा, स्वीकृत उत्तर के दूसरे पैराग्राफ में कथन, "यदि आपकी प्रक्रिया संपूर्ण समय समाप्त कर रही है तो इसे वास्तविक गणना पर आवंटित किया जाता है, तब समय-निर्धारण कुछ भी बदलने वाला नहीं है" जब तक कि प्रक्रिया आम तौर पर सभी की सर्वोच्च प्राथमिकता नहीं होती है। जब भी यह चलाने के लिए इंतजार कर रहा है तो चलने योग्य धागे। ऐसा इसलिए है क्योंकि अन्य सभी परिस्थितियों में, प्राथमिकता को बढ़ाकर प्रति दीवार-घड़ी के अंतराल में अधिक बार प्राप्त करने की संभावना है।

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

डिस्क्लेमर: मैं मि। डिमिक्क को नहीं जानता, हालांकि मैं बता सकता हूं कि वह जानता है कि वह किस बारे में लिख रहा है।


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

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

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

@ AndonM.Coleman विस्टा के रूप में और बाद में, हाँ, यह कर सकता है और करता है।
जेमी हनराहान

@ जैमीहैनन: ठीक है, आप हमेशा कॉल कर सकते हैं timeBeginPeriod (...), जो कुछ भी इंटरैक्टिव पहले से ही करता है। एक गेम आमतौर पर इसे 1 पर सेट करेगा जब यह शुरू होता है, और यह सिस्टम पर चलने वाली हर चीज के लिए बोर्ड भर में 1 एमएस शेड्यूलिंग अंतराल लागू करता है। यह सिर्फ उस प्रक्रिया से अलग नहीं है जिसने इसे किया। यह इस कारण का हिस्सा है कि विंडोज को मल्टी-टास्किंग के लिए गंभीरता से लेना मुश्किल है।
एंडन एम। कोलमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.