Priorytet w Harmonogramie zadań systemu Windows

Każdy, kto uruchamia zadania w Harmonogramie zadań systemu Windows, prędzej czy później napotka niewytłumaczalne różnice w czasie wykonania. Skrypt PHP, który uruchamia się w 5 minut w wierszu poleceń, nagle potrzebuje 20 minut, gdy jest wykonywany za pośrednictwem Harmonogramu zadań systemu Windows. Ten sam użytkownik, te same uprawnienia, ten sam kod – czterokrotnie dłuższy czas wykonania. Co się działo?


Po godzinach debugowania, sesjach Monitora Procesów i niezliczonych porównaniach konfiguracji, rozwiązanie okazało się przerażająco proste: Harmonogram zadań systemu Windows domyślnie ustawia niższy priorytet procesu. Domyślna wartość dla zadań w Harmonogramie zadań to 7 (poniżej normy), nie 4-6 (Normalnie), jak oczekiwano. Ta pozornie niewielka różnica może prowadzić do znacznego spadku wydajności w operacjach wymagających dużej ilości operacji wejścia/wyjścia.

Szczegółowe poziomy priorytetów systemu Windows ::

WartośćPriorytetOpis
0W czasie rzeczywistymNajwyższy priorytet (uwaga!)
1WysokiWysoki priorytet
2-3Powyżej normyO normalności
4-6NormalnaStandard dla procesów interaktywnych
7Poniżej normyDOMYŚLNE w Harmonogramie zadań
8-9Poniżej normyJeszcze niżej
10BezczynnyNajniższy priorytet

Problem z priorytetami w harmonogramowaniu zadań jest wielowarstwowy: podczas eksportowania zadania i przeglądania pliku XML często można znaleźć NIE Ustawienie priorytetu. System Windows będzie wówczas dyskretnie używał wartości domyślnej. 7. Interfejs graficzny wyświetla tę wartość podczas eksportu, ale nie jest ona jawnie przechowywana w zadaniu. Niższy priorytet nie tylko zmniejsza obciążenie procesora, ale także:

  • Ograniczone operacje wejścia/wyjścia dysku
  • Niższy priorytet sieci
  • Słabe buforowanie systemu plików
  • Opóźnienia w dostępie do bazy danych

Nawet jeśli używasz tego samego użytkownika i włączysz opcję „Uruchom z najwyższymi uprawnieniami”, zadanie zostanie uruchomione na innej stacji Windows/w innym środowisku pulpitu z innymi priorytetami. Aby zidentyfikować problem, możesz użyć programu PowerShell, aby wyświetlić listę wszystkich zadań wraz z ich rzeczywistymi priorytetami.:

38b7fa6c77dc344401485cd338ea4128

Prawie wszystkie moje zadania były wykonywane priorytetowo 7. Teraz szczegółowo korygujemy priorytet kilku zadań na raz:

38b7fa6c77dc344401485cd338ea4128

Po ustawieniu priorytetu na 4 (Normalnie) mój skrypt PHP uruchomił się ponownie po oczekiwanych 300 sekundach. Jeśli skonfigurowałeś zadania z konkretnym kontem użytkownika, możesz to łatwo określić w wierszu 10 w następujący sposób.:

38b7fa6c77dc344401485cd338ea4128

Plecy