Prioritate în Programatorul de activități Windows

Oricine rulează joburi în programatorul de activități Windows se va întâmpla mai devreme sau mai târziu cu diferențe inexplicabile în timpul de execuție. Un script PHP care rulează în 5 minute pe linia de comandă durează brusc 20 de minute când rulează prin Windows Task Scheduler. Același utilizator, aceleași drepturi, același cod – de patru ori timpul de execuție. Ce se întâmpla acolo?


După ore Depanare, Sesiunile de monitorizare a proceselor și nenumărate comparații de configurare, soluția a fost șocant de simplă: programarea sarcinilor Windows stabilește o prioritate mai mică a procesului în mod implicit. Valoarea implicită pentru sarcini în Task Scheduler este 7 (Sub normal), nu 4-6 (Normal), așa cum v-ați aștepta. Această diferență aparent mică poate duce la pierderi masive de performanță în operațiunile intensive I/O.

Nivelurile de prioritate Windows în detaliu sunt:

ValoarePrioritateDescriere
0În timp realPrioritate maximă (atenție!)
1RidicatPrioritate ridicată
2-3Peste normalDespre Normal
4-6NormalStandard pentru procese interactive
7Sub normalIMPLICIT în Programatorul de activități
8-9Sub normalChiar mai jos
10InactivCea mai mică prioritate

Problema priorității în planificarea sarcinilor este complexă: când exportați o sarcină și vă uitați la XML, veți găsi adesea nu Setare de prioritate. Windows va utiliza apoi în mod silențios valoarea implicită 7. Interfața grafică afișează această valoare în timpul exportului, dar nu este stocată explicit în sarcină. Prioritatea mai mică nu numai că duce la un timp CPU mai mic, dar și:

  • Operațiuni I/O pe disc limitate
  • Prioritate mai mică a rețelei
  • Cache slabă a sistemului de fișiere
  • Întârzieri în accesul la baza de date

Chiar dacă utilizați același utilizator și activați opțiunea „Executare cu cele mai mari privilegii”, sarcina se execută într-un alt mediu Windows, stație/desktop, cu priorități diferite. Pentru a identifica problema, puteți utiliza PowerShell pentru a lista toate sarcinile cu prioritățile lor reale.:

38b7fa6c77dc344401485cd338ea4128

Aproape toate sarcinile mele au rulat cu prioritate 7. Acum corectăm în mod specific prioritatea mai multor sarcini simultan:

38b7fa6c77dc344401485cd338ea4128

După setarea priorității la 4 Scriptul meu PHP a rulat (în mod normal) din nou în cele 300 de secunde așteptate. Dacă ați configurat sarcini cu un anumit cont de utilizator, puteți pur și simplu să introduceți acest lucru în rândul 10, după cum urmează:

38b7fa6c77dc344401485cd338ea4128

Înapoi