Priorytet w Harmonogramie zadań systemu Windows

Każdy, kto uruchamia zadania w harmonogramie zadań systemu Windows, prędzej czy później natknie się na niewytłumaczalne różnice w czasie wykonywania. Skrypt PHP, który działa w wierszu poleceń w ciągu 5 minut, nagle zajmuje 20 minut, jeśli jest uruchamiany za pomocą Harmonogramu zadań systemu Windows. Ten sam użytkownik, te same uprawnienia, ten sam kod – czterokrotnie dłuższy czas wykonania. Co się tam działo?


Po godzinach Debugowanie, Sesje monitorowania procesów i niezliczone porównania konfiguracji — rozwiązanie było szokująco proste: planowanie zadań systemu Windows domyślnie ustawia niższy priorytet procesu. Domyślna wartość zadań w Harmonogramie zadań to 7 (poniżej normy), nie 4-6 (Normalny), jak można się spodziewać. Ta pozornie niewielka różnica może prowadzić do ogromnych spadków wydajności w operacjach intensywnie korzystających z operacji we/wy.

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 wieloaspektowy: 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 Mój skrypt PHP uruchomił się (normalnie) ponownie w oczekiwanych 300 sekundach. Jeśli skonfigurowałeś zadania z konkretnym kontem użytkownika, możesz po prostu wpisać je w wierszu 10 w następujący sposób:

38b7fa6c77dc344401485cd338ea4128

Plecy