विंडोज़ टास्क शेड्यूलर में जॉब चलाने वाले किसी भी व्यक्ति को देर-सबेर रनटाइम में अजीबोगरीब अंतरों का सामना करना पड़ेगा। कमांड लाइन पर 5 मिनट में चलने वाली एक PHP स्क्रिप्ट, विंडोज़ टास्क शेड्यूलर के ज़रिए अचानक 20 मिनट में चलने लगती है। वही उपयोगकर्ता, वही अनुमतियाँ, वही कोड - चार गुना ज़्यादा निष्पादन समय। आखिर क्या हो रहा था?
घंटों की डिबगिंग, प्रोसेस मॉनिटर सेशन और अनगिनत कॉन्फ़िगरेशन तुलनाओं के बाद, समाधान बेहद सरल निकला: विंडोज़ टास्क शेड्यूलर डिफ़ॉल्ट रूप से एक निचली प्रक्रिया प्राथमिकता सेट करता है। टास्क शेड्यूलर में कार्यों के लिए डिफ़ॉल्ट मान है 7 (सामान्य से नीचे), नहीं 4-6 (सामान्य) जैसा कि अपेक्षित था। यह छोटा सा अंतर I/O-गहन कार्यों में प्रदर्शन में भारी गिरावट का कारण बन सकता है।
विंडोज़ प्राथमिकता स्तर विस्तार से इस प्रकार हैं:
| कीमत | प्राथमिकता | विवरण |
|---|---|---|
| 0 | रियल टाइम | सर्वोच्च प्राथमिकता (सावधानी!) |
| 1 | उच्च | उच्च प्राथमिकता |
| 2-3 | सामान्य से उपर | नॉर्मल के बारे में |
| 4-6 | सामान्य | इंटरैक्टिव प्रक्रियाओं के लिए मानक |
| 7 | सामान्य से नीचे | कार्य शेड्यूलर में डिफ़ॉल्ट |
| 8-9 | सामान्य से नीचे | और भी कम |
| 10 | निठल्ला | सबसे कम प्राथमिकता |
कार्य शेड्यूलिंग में प्राथमिकता की समस्या बहुस्तरीय है: जब आप किसी कार्य को निर्यात करते हैं और XML को देखते हैं, तो आप अक्सर नहीं प्राथमिकता सेटिंग। इसके बाद विंडोज़ चुपचाप डिफ़ॉल्ट मान का उपयोग करेगा 7. GUI निर्यात के दौरान यह मान प्रदर्शित करता है, लेकिन यह कार्य में स्पष्ट रूप से संग्रहीत नहीं होता है। कम प्राथमिकता से न केवल CPU समय कम होता है, बल्कि:
- थ्रॉटल्ड डिस्क I/O संचालन
- निम्न नेटवर्क प्राथमिकता
- खराब फ़ाइल सिस्टम कैशिंग
- डेटाबेस तक पहुँच में देरी
भले ही आप एक ही उपयोगकर्ता का उपयोग करें और "उच्चतम विशेषाधिकारों के साथ चलाएँ" सक्षम करें, कार्य भिन्न प्राथमिकताओं के साथ एक भिन्न Windows स्टेशन/डेस्कटॉप परिवेश में चलता है। समस्या की पहचान करने के लिए, आप PowerShell का उपयोग करके सभी कार्यों को उनकी वास्तविक प्राथमिकताओं के साथ सूचीबद्ध कर सकते हैं।:
38b7fa6c77dc344401485cd338ea4128
मेरे लगभग सभी कार्य प्राथमिकता के साथ चले 7. अब हम एक साथ कई कार्यों की प्राथमिकता को विशेष रूप से ठीक करते हैं:
38b7fa6c77dc344401485cd338ea4128
प्राथमिकता निर्धारित करने के बाद 4 (सामान्यतः) मेरी PHP स्क्रिप्ट अपेक्षित 300 सेकंड में फिर से चल पड़ी। यदि आपने किसी विशिष्ट उपयोगकर्ता खाते के साथ कार्यों को कॉन्फ़िगर किया है, तो आप इसे पंक्ति 10 में निम्नानुसार आसानी से निर्दिष्ट कर सकते हैं।:
38b7fa6c77dc344401485cd338ea4128