أي شخص يدير وظائف في برنامج جدولة مهام Windows سوف يعثر عاجلاً أم آجلاً على اختلافات لا يمكن تفسيرها في وقت التشغيل. فجأة يستغرق برنامج PHP النصي الذي يتم تشغيله خلال 5 دقائق على سطر الأوامر 20 دقيقة عند تشغيله عبر برنامج جدولة المهام في Windows. نفس المستخدم، نفس الحقوق، نفس الكود - أربعة أضعاف وقت التنفيذ. ماذا كان يحدث هناك؟
بعد ساعات تصحيح الأخطاء, جلسات مراقبة العمليات ومقارنات التكوين التي لا تعد ولا تحصى، كان الحل بسيطًا بشكل صادم: تحدد جدولة مهام 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 ثانية المتوقعة. إذا قمت بتكوين المهام باستخدام حساب مستخدم محدد، فيمكنك ببساطة إدخال ذلك في السطر 10 على النحو التالي:
38b7fa6c77dc344401485cd338ea4128