Όποιος εκτελεί εργασίες στον προγραμματιστή εργασιών των 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