प्राथमिकताएँ कार्य-प्रबंधक पर कैसे काम करती हैं और मुझे इसे कब / सेट करना चाहिए?


30

मैं यह देखने के लिए कि वास्तव में क्या होता है, यह देखने के लिए कुछ प्रक्रियाओं को प्राथमिकता दे रहा हूं, लेकिन, लगता है कि ... कुछ नहीं; यह सब उसी तरह चलता है ...

मैंने Google पर पाया कि प्राथमिकताएं वास्तव में प्रसंस्करण की गति से नहीं जुड़ी हैं, क्या यह सच है? फिर क्यों नहीं? अगर किसी प्रक्रिया की प्राथमिकता सबसे अधिक है, तो क्या उसे तेज नहीं होना चाहिए ??


4
संक्षिप्त उत्तर: When should I set [priorities in Task Manager]? लगभग कभी नहीं।
डैन हेंडरसन

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

अपने कंप्यूटर के लिए सोचने की कोशिश मत करो। आप जीत नहीं पाएंगे। यह जानता है कि अपने धागों को आप से बेहतर तरीके से कैसे संभालना है।
b1nary.atr0phy

जवाबों:


52

मान लीजिए कि आपके पास किराने की दुकान के लिए "लाइन के प्रमुख के पास" कार्ड है। आप स्टोर पर जाते हैं, अपनी गाड़ी भरते हैं, चेकआउट काउंटरों पर जाते हैं, और पाते हैं कि लाइन में कोई नहीं है। क्या आपका कार्ड आपको तेज़ी से जांचने में मदद करता है? नहीं।

प्राथमिकताएं प्रसंस्करण की गति को प्रभावित नहीं करती हैं, इसमें उच्च प्राथमिकता प्रक्रिया को तेजी से चलाने या यहां तक ​​कि अधिक सीपीयू समय का उपयोग करने के लिए नहीं मिलता है ... यदि यह केवल एक चीज है जो सीपीयू का उपयोग करना चाहता है।

वास्तव में इस बारे में बात करने के लिए हमें थ्रेड्स का उल्लेख करना होगा। विंडोज़ में प्रक्रियाएँ "नहीं" चलती हैं। थ्रेड्स, जो प्रक्रियाओं का हिस्सा हैं, जो रन हैं। (हालांकि अगर एक प्रक्रिया में केवल एक धागा होता है, तो भेद बाहर से बहुत अस्पष्ट है।)

(वैसे: विपणन शब्दावली जिसके द्वारा एक सीपीयू है, उदाहरण के लिए, "चार कोर और आठ धागे", भ्रामक है। सीपीयू में कोर हैं, लेकिन सीपीयू में "थ्रेड" नहीं हैं। थ्रेड्स प्रक्रियाओं का एक भाग हैं। एक सीपीयू कोर। हाइपरथ्रेडिंग सक्षम किए बिना एक थ्रेड चला सकते हैं , हाइपरथ्रेडिंग सक्षम होने के साथ, एक कोर दो थ्रेड चला सकता है । लेकिन सीपीयू में "थ्रेड" नहीं हैं।)

प्रत्येक थ्रेड हमेशा कई शेड्यूलिंग अवस्थाओं में से एक में होता है। सबसे अधिक देखी जाने वाली अवस्थाएँ हैं: प्रतीक्षा करना (* nix इसे "अवरुद्ध" कहता है, दोनों OS में इसका अर्थ है I / O या समान की प्रतीक्षा करना, कोई CPU समय का उपयोग नहीं करता है और कोई भी नहीं चाहता है); तैयार (सीपीयू समय का उपयोग करना चाहता है लेकिन अभी इसके लिए कोई सीपीयू उपलब्ध नहीं हैं); और चल रहा है । केवल चलने वाले धागे सीपीयू समय का उपभोग करते हैं; यानी यदि किसी प्रक्रिया में कोई रनिंग थ्रेड नहीं है, तो यह टास्क मैनेजर जैसे टूल में शून्य% सीपीयू समय का उपयोग करने के लिए देखा जाएगा।

एक धागा एक समय में केवल एक कोर पर चल सकता है (या, यदि हाइपरथ्रेडिंग सक्षम है, "तार्किक प्रोसेसर"), तो एक प्रक्रिया केवल कई सीपीयू कोर (या एलपी) का उपयोग कर सकती है क्योंकि इसमें थ्रेड्स हैं जो इस समय चलाना चाहते हैं। । (एक ही कथन पूरे सिस्टम के रूप में बनाया जा सकता है।)

अधिकांश सिस्टम पर अधिकांश थ्रेड्स अपना अधिकांश समय प्रतीक्षा अवस्था में व्यतीत करते हैं। (यही कारण है कि आपकी निष्क्रिय प्रक्रिया 95% से अधिक CPU समय पर हो रही होनी चाहिए जब आपका सिस्टम कुछ भी नहीं कर रहा है।) अपवाद वीडियो या 3 डी रेंडरिंग, गेमिंग आदि जैसी चीजों के "काम" के धागे होंगे। वास्तव में 100% CPU का उपयोग कर सकते हैं, क्योंकि उन्हें आम तौर पर कुछ इनपुट डेटा पर काम करना पड़ता है जो उन्हें कहीं से पढ़ना होता है, और वे आम तौर पर आउटपुट डेटा बनाते हैं जिसे कहीं लिखा जाना होता है। और वे समय के साथ मेमोरी में बहुत सारे अलग-अलग डेटा को संदर्भित कर सकते हैं, जिसका मतलब हो सकता है कि उन्हें हल करने के लिए कठिन पृष्ठ दोषों की प्रतीक्षा करनी होगी।

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

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

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

यदि दो थ्रेड्स एक CPU का उपयोग करना चाहते हैं, और वे एक ही प्राथमिकता के हैं, तो उन्हें "टाइम-स्लाइसिंग" कहा जाता है और समय के साथ, प्रत्येक को सीपीयू के समय का लगभग 50% मिलता है। जबकि अगर वे अलग-अलग प्राथमिकताओं के हैं, तो उच्च प्राथमिकता वाले धागे को 100% और निचले को कुछ भी नहीं मिलता है ।

(व्यवहार में यह काफी कुछ नहीं मिलेगा, क्योंकि यह एक आवधिक "भुखमरी से बचने की प्राथमिकता को बढ़ावा देगा" का अनुभव करेगा जो इसे हर 4 या 5 सेकंड या तो कुछ सेकंड में एमएसएनसी दे सकता है। लेकिन यह वास्तव में "उच्च प्राथमिकता" का अपवाद नहीं है। जीतता है ", क्योंकि यह भूखे धागे की प्राथमिकता को समायोजित करके किया जाता है।"

यदि आपके पास एक से अधिक CPU कोर हैं, तो चीजें अधिक दिलचस्प हो जाती हैं, और सामान्य रूप से प्राथमिकताओं का प्रभाव कम होता है। मान लीजिए कि आपके पास दो धागे हैं जो चलाना चाहते हैं। और मान लीजिए कि आपके पास दो या दो से अधिक CPU कोर हैं जो उन थ्रेड्स की तुलना में समान या उच्च प्राथमिकता के कुछ और नहीं कर रहे हैं। फिर आपके दो धागे प्रत्येक को अपनी प्राथमिकताओं की परवाह किए बिना 100% कोर प्राप्त करेंगे ।

(दो लोग सुपरमार्केट में दिखाई देते हैं, और दो चेकर्स मुफ्त हैं। ग्राहकों में से एक के पास "लाइन के प्रमुख के पास" कार्ड है। कोई फर्क नहीं पड़ता।)

tl; डॉ। संस्करण (अब तक): प्राथमिकताएं "सीपीयू समय के किस अनुपात में मिलती हैं" के बारे में नहीं हैं, बल्कि "जो पहले चलता है"।

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

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

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

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

निष्कर्ष के तौर पर...

अधिकांश चीजों को "सामान्य" पर छोड़ना उचित है। यदि आप नहीं करते हैं, तो आप आसानी से किसी ऐसी चीज को भूखा रख सकते हैं, जिसे आप वास्तव में काम करना चाहते हैं (भले ही आप यह नहीं जानते हों कि यह मौजूद है), जैसे ओएस का डिस्क कैश फ्लशिंग फ़ंक्शन। वास्तव में, ओएस की कई प्रक्रियाएं सामान्य के अलावा अन्य पर होंगी, और जहां भी विंडोज उन्हें डालती है, उन्हें छोड़ दिया जाना चाहिए।

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

तथाकथित रियलटाइम प्राथमिकता वर्ग के लिए कभी भी कुछ भी निर्धारित न करें।

(संपादित करें - यह पैराग्राफ जोड़ा गया) ठीक है, यह एक चरम कथन है। ("कोई भी सार्वभौमिक दावा सही नहीं है - इस को छोड़कर नहीं।") कम से कम, बहुत सावधानी से विचार किए बिना नहीं। यदि आपका लक्ष्य किसी चीज़ को तेज़ी से चलाना है, तो यह संभवत: मदद नहीं करेगा। लेकिन यह आपके सिस्टम को "हार्ड लॉक" कर सकता है (एक रीसेट की आवश्यकता होती है, या अधिकांश आधुनिक मशीनों पर, एक शक्ति चक्र की आवश्यकता होती है)। या इसे इतना अनुत्तरदायी बना दें कि यह हार्ड-लॉक भी हो जाए।

nb: कोई भी वीडियो प्लेयर ऐप विस्टा और बाद में "मल्टीमीडिया क्लास शेड्यूलिंग" फीचर में शामिल होना चाहिए। यह अपेक्षाकृत कम अंतराल पर दोबारा प्राप्त सीपीयू के 80% तक स्वचालित रूप से दे देगा। यदि आप कुछ के साथ गड़बड़-मुक्त प्लेबैक प्राप्त नहीं कर सकते हैं तो यह बहुत गलत है।

अधिक जानकारी के लिए, सोलोमन, रोसिनोविच और आयनोस्कु द्वारा विंडोज इंटर्नल 6 वें संस्करण में थ्रेड्स और शेड्यूलिंग पर अध्याय देखें ।

प्रक्रिया और थ्रेड प्राथमिकताएँ कैसे सेट की जाती हैं और टास्क मैनेजर में "प्राथमिकता" कॉलम का अर्थ क्या है, इस बारे में जानकारी के लिए मेरा जवाब भी देखें ।


1
वैसे, निम्नांकित से जुड़े प्रश्न के लिए मेरा उत्तर संबंधित है: superuser.com/questions/949030/…
जेमी हन्रान

1
इसके अलावा: "शेड्यूलिंग", "शेड्यूलर", आदि, यहां विंडोज कर्नेल रूटीन का उल्लेख है जो यह तय करता है कि कौन से थ्रेड को चलाने के लिए मिलता है और उन्हें किस सीपीयू पर चलना चाहिए। "कार्य शेड्यूलिंग" के लिए नहीं, जो विशेष समय पर प्रक्रियाओं को लॉन्च करने या विभिन्न ट्रिगर्स के जवाब में है।
जेमी हन्रहान

@JamieHanrahan ठीक है मैंने इसे यहाँ स्थानांतरित किया: superuser.com/questions/1380473/…
Julien__

5

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

उदाहरण के लिए आप एक वीडियो को एन्कोड करते हैं और एक ही समय में एक अलग वीडियो देखते हैं। इसी तरह, एन्कोडिंग एप्लिकेशन आपके सभी सीपीयू कोर पर 100% कंप्यूटिंग शक्ति का उपयोग करेगा। परिणामस्वरूप, अन्य अनुप्रयोग हकलाने लग सकते हैं।

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


"संभवतः, एन्कोडिंग एप्लिकेशन आपके सभी सीपीयू कोर पर 100% कंप्यूटिंग शक्ति का उपयोग करेगा।" यह केवल तभी संभव है जब कम से कम संख्या में कोर एन्कोडिंग थ्रेड हों।
जेमी हनराहन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.