Προτεραιότητα στο Χρονοδιάγραμμα εργασιών των Windows

Όποιος εκτελεί εργασίες στον προγραμματιστή εργασιών των Windows αργά ή γρήγορα θα σκοντάψει σε ανεξήγητες διαφορές στο χρόνο εκτέλεσης. Ένα σενάριο PHP που εκτελείται σε 5 λεπτά στη γραμμή εντολών διαρκεί ξαφνικά 20 λεπτά όταν εκτελείται μέσω του Προγραμματιστή εργασιών των Windows. Ίδιος χρήστης, ίδια δικαιώματα, ίδιος κωδικός – τετραπλάσιος ο χρόνος εκτέλεσης. Τι γινόταν εκεί;


Μετά από ώρες Εντοπισμός σφαλμάτων, Συνεδρίες παρακολούθησης διεργασιών και αμέτρητες συγκρίσεις διαμόρφωσης, η λύση ήταν συγκλονιστικά απλή: ο προγραμματισμός εργασιών των Windows θέτει μια χαμηλότερη προτεραιότητα διαδικασίας από προεπιλογή. Η προεπιλεγμένη τιμή για εργασίες στο Task Scheduler είναι 7 (Κάτω από το κανονικό), όχι 4-6 (Κανονικό), όπως θα περίμενες. Αυτή η φαινομενικά μικρή διαφορά μπορεί να οδηγήσει σε τεράστιες απώλειες απόδοσης σε λειτουργίες έντασης I/O.

Τα επίπεδα προτεραιότητας των Windows αναλυτικά είναι:

ΑξίαΠροτεραιότηταΠεριγραφή
0Πραγματικός χρόνοςΥψηλότερη προτεραιότητα (προσοχή!)
1ΨηλάΥψηλή προτεραιότητα
2-3Πάνω από το κανονικόΣχετικά με το Κανονικό
4-6ΚανονικόςΠρότυπο για διαδραστικές διαδικασίες
7Κάτω από το κανονικόΠΡΟΕΠΙΛΟΓΗ στο Χρονοδιάγραμμα εργασιών
8-9Κάτω από το κανονικόΑκόμα χαμηλότερα
10ΑεργοςΧαμηλότερη προτεραιότητα

Το πρόβλημα με την προτεραιότητα στον προγραμματισμό εργασιών είναι πολύπλευρο: Όταν εξάγετε μια εργασία και εξετάζετε το XML, συχνά θα διαπιστώσετε Όχι Ρύθμιση προτεραιότητας. Τα Windows θα χρησιμοποιήσουν στη συνέχεια σιωπηλά την προεπιλεγμένη τιμή 7. Το γραφικό περιβάλλον χρήστη (GUI) εμφανίζει αυτήν την τιμή κατά την εξαγωγή, αλλά δεν αποθηκεύεται ρητά στην εργασία. Η χαμηλότερη προτεραιότητα όχι μόνο έχει ως αποτέλεσμα λιγότερο χρόνο CPU, αλλά και:

  • Λειτουργίες εισόδου/εξόδου με περιορισμένο δίσκο
  • Χαμηλότερη προτεραιότητα δικτύου
  • Κακή αποθήκευση στην προσωρινή μνήμη του συστήματος αρχείων
  • Καθυστερήσεις στην πρόσβαση στη βάση δεδομένων

Ακόμα κι αν χρησιμοποιείτε τον ίδιο χρήστη και ενεργοποιήσετε την επιλογή "Εκτέλεση με τα υψηλότερα δικαιώματα", η εργασία εκτελείται σε διαφορετικό περιβάλλον σταθμού/επιφάνειας εργασίας των Windows με διαφορετικές προτεραιότητες. Για να εντοπίσετε το πρόβλημα, μπορείτε να χρησιμοποιήσετε το PowerShell για να παραθέσετε όλες τις εργασίες με τις πραγματικές τους προτεραιότητες.:

38b7fa6c77dc344401485cd338ea4128

Σχεδόν όλες οι εργασίες μου εκτελούνταν με προτεραιότητα 7. Τώρα διορθώνουμε συγκεκριμένα την προτεραιότητα πολλών εργασιών ταυτόχρονα:

38b7fa6c77dc344401485cd338ea4128

Αφού ορίσετε την προτεραιότητα σε 4 Το σενάριο PHP μου έτρεξε (κανονικά) ξανά στα αναμενόμενα 300 δευτερόλεπτα. Εάν έχετε διαμορφώσει εργασίες με συγκεκριμένο λογαριασμό χρήστη, μπορείτε απλώς να το εισαγάγετε στη γραμμή 10 ως εξής:

38b7fa6c77dc344401485cd338ea4128

Πίσω