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