هر کسی که کارها را در Windows Task Scheduler اجرا میکند، دیر یا زود با تفاوتهای غیرقابل توضیح در زمان اجرا مواجه خواهد شد. یک اسکریپت PHP که در خط فرمان در ۵ دقیقه اجرا میشود، ناگهان هنگام اجرا از طریق Windows Task Scheduler بیست دقیقه طول میکشد. همان کاربر، همان مجوزها، همان کد - چهار برابر زمان اجرا. چه اتفاقی افتاده بود؟
پس از ساعتها اشکالزدایی، جلسات نظارت بر فرآیندها و مقایسههای بیشمار پیکربندی، راهحل به طرز وحشتناکی ساده بود: Windows Task Scheduler به طور پیشفرض اولویت فرآیند پایینتری را تعیین میکند. مقدار پیشفرض برای وظایف در Task Scheduler برابر است با: 7 (زیر نرمال)، نه 4-6 (عادی) همانطور که انتظار میرفت. این تفاوت به ظاهر کوچک میتواند منجر به تخریب گسترده عملکرد در عملیاتهای I/O-intensive شود.
سطوح اولویت ویندوز با جزئیات عبارتند از::
| ارزش | اولویت | شرح |
|---|---|---|
| 0 | بیدرنگ | بالاترین اولویت (احتیاط!) |
| 1 | بالا | اولویت بالا |
| 2-3 | بالاتر از حد نرمال | درباره عادی |
| 4-6 | عادی | استاندارد برای فرآیندهای تعاملی |
| 7 | پایینتر از حد نرمال | پیشفرض در زمانبندی وظایف |
| 8-9 | پایینتر از حد نرمال | حتی پایینتر |
| 10 | بیکار | کمترین اولویت |
مشکل اولویت در زمانبندی وظایف چندلایه است: وقتی یک وظیفه را اکسپورت میکنید و به XML آن نگاه میکنید، اغلب... خیر تنظیم اولویت. سپس ویندوز بیسروصدا از مقدار پیشفرض استفاده خواهد کرد. 7. رابط کاربری گرافیکی (GUI) این مقدار را هنگام خروجی گرفتن نمایش میدهد، اما به طور صریح در وظیفه ذخیره نمیشود. اولویت پایینتر نه تنها منجر به زمان کمتر CPU میشود، بلکه:
- عملیات ورودی/خروجی دیسک با محدودیت
- اولویت شبکه پایینتر
- حافظه پنهان ضعیف سیستم فایل
- تأخیر در دسترسی به پایگاه داده
حتی اگر از همان کاربر استفاده کنید و «اجرا با بالاترین امتیازات» را فعال کنید، این وظیفه در یک محیط ویندوز استیشن/دسکتاپ متفاوت با اولویتهای متفاوت اجرا میشود. برای شناسایی مشکل، میتوانید از PowerShell برای فهرست کردن تمام وظایف با اولویتهای واقعی آنها استفاده کنید.:
38b7fa6c77dc344401485cd338ea4128
تقریباً تمام وظایف من با اولویت انجام شدند 7. اکنون ما به طور خاص اولویت چندین کار را به طور همزمان اصلاح میکنیم:
38b7fa6c77dc344401485cd338ea4128
پس از تنظیم اولویت 4 (معمولاً) اسکریپت PHP من دوباره در ۳۰۰ ثانیه مورد انتظار اجرا شد. اگر وظایف را با یک حساب کاربری خاص پیکربندی کردهاید، میتوانید به راحتی این را در خط ۱۰ به شرح زیر نیز مشخص کنید.:
38b7fa6c77dc344401485cd338ea4128