أي شخص يُشغّل مهامًا في مُجدول مهام ويندوز سيواجه عاجلًا أم آجلًا اختلافات غير مُفسّرة في وقت التشغيل. نص PHP برمجي يعمل في 5 دقائق على سطر الأوامر، يستغرق فجأة 20 دقيقة عند تنفيذه عبر مُجدول مهام ويندوز. نفس المستخدم، نفس الصلاحيات، نفس الكود - أربعة أضعاف وقت التنفيذ. ماذا كان يحدث؟
بعد ساعات من تصحيح الأخطاء، وجلسات مراقبة العملية، ومقارنات لا تُحصى للتكوينات، كان الحل بسيطًا للغاية: يُحدد مُجدول مهام Windows أولوية عملية أقل افتراضيًا. القيمة الافتراضية للمهام في مُجدول المهام هي 7 (أقل من المعدل الطبيعي) ليس 4-6 (طبيعي) كما هو متوقع. قد يؤدي هذا الاختلاف البسيط إلى انخفاض كبير في الأداء في العمليات كثيفة الإدخال/الإخراج.
مستويات أولوية Windows بالتفصيل هي:
| قيمة | أولوية | وصف |
|---|---|---|
| 0 | في الوقت الحالى | أعلى أولوية (تحذير!) |
| 1 | عالي | أولوية عالية |
| 2-3 | فوق المعدل الطبيعي | حول الوضع الطبيعي |
| 4-6 | طبيعي | معيار العمليات التفاعلية |
| 7 | أقل من المعدل الطبيعي | افتراضيًا في جدول المهام |
| 8-9 | أقل من المعدل الطبيعي | أقل حتى |
| 10 | عاطل | أقل أولوية |
المشكلة المتعلقة بالأولوية في جدولة المهام متعددة الطبقات: عندما تقوم بتصدير مهمة وتنظر إلى XML، ستجد غالبًا لا تحديد الأولوية. سيستخدم Windows بعد ذلك القيمة الافتراضية بصمت. 7. تعرض واجهة المستخدم الرسومية هذه القيمة أثناء التصدير، ولكنها لا تُخزَّن صراحةً في المهمة. لا يُؤدي انخفاض الأولوية إلى تقليل وقت وحدة المعالجة المركزية فحسب، بل أيضًا:
- عمليات إدخال/إخراج القرص المخنوق
- أولوية الشبكة المنخفضة
- تخزين مؤقت ضعيف لنظام الملفات
- تأخيرات في الوصول إلى قاعدة البيانات
حتى إذا استخدمتَ نفس المستخدم وفعّلتَ خيار "التشغيل بأعلى صلاحيات"، فسيتم تشغيل المهمة في بيئة سطح مكتب/محطة ويندوز مختلفة بأولويات مختلفة. لتحديد المشكلة، يمكنك استخدام PowerShell لعرض جميع المهام مع أولوياتها الفعلية.:
38b7fa6c77dc344401485cd338ea4128
تم تنفيذ جميع مهامي تقريبًا بالأولوية 7. نقوم الآن بتصحيح أولوية العديد من المهام في وقت واحد على وجه التحديد:
38b7fa6c77dc344401485cd338ea4128
بعد تحديد الأولوية لـ 4 عادةً، يعمل نص PHP الخاص بي مجددًا خلال الـ 300 ثانية المتوقعة. إذا كنت قد هيأت مهامًا بحساب مستخدم محدد، فيمكنك أيضًا تحديد ذلك بسهولة في السطر العاشر كما يلي.:
38b7fa6c77dc344401485cd338ea4128