İşleri Windows görev zamanlayıcısında çalıştıran herkes, er ya da geç çalışma zamanındaki açıklanamayan farklılıklarla karşılaşacaktır. Komut satırında 5 dakikada çalışan bir PHP betiği, Windows Görev Zamanlayıcı ile çalıştırıldığında aniden 20 dakika sürüyor. Aynı kullanıcı, aynı haklar, aynı kod – yürütme süresinin dört katı. Orada neler oluyordu?
Saatler sonra Hata ayıklama, Süreç izleme oturumları ve sayısız konfigürasyon karşılaştırması sonucunda çözüm şaşırtıcı derecede basitti: Windows görev zamanlaması, varsayılan olarak daha düşük bir işlem önceliğini ayarlar. Görev Zamanlayıcı'daki görevler için varsayılan değer: 7 (Normalin Altında), değil 4-6 (Normal), beklediğiniz gibi. Bu küçük gibi görünen fark, yoğun G/Ç operasyonlarında büyük performans kayıplarına yol açabilir.
Windows öncelik düzeyleri ayrıntılı olarak şöyledir::
| Değer | Öncelik | Açıklama |
|---|---|---|
| 0 | Gerçek zamanlı | En yüksek öncelik (dikkat!) |
| 1 | Yüksek | Yüksek öncelik |
| 2-3 | Normalin Üstü | Normal Hakkında |
| 4-6 | Normal | Etkileşimli süreçler için standart |
| 7 | Normalin Altında | Görev Zamanlayıcı'da ÖN TANIMLI |
| 8-9 | Normalin Altında | Daha da düşük |
| 10 | Boşta | En düşük öncelik |
Görev planlamasında önceliklendirme sorunu çok yönlüdür: Bir görevi dışa aktardığınızda ve XML'e baktığınızda, genellikle şunu görürsünüz: HAYIR Öncelik ayarı. Windows daha sonra sessizce varsayılan değeri kullanacaktır 7. GUI, bu değeri dışa aktarma sırasında görüntüler, ancak görevde açıkça saklanmaz. Daha düşük öncelik, yalnızca daha az CPU süresi sağlamakla kalmaz, aynı zamanda:
- Kısıtlanmış disk G/Ç işlemleri
- Daha düşük ağ önceliği
- Zayıf dosya sistemi önbelleği
- Veritabanı erişiminde gecikmeler
Aynı kullanıcıyı kullanıp "En yüksek ayrıcalıklarla çalıştır" seçeneğini etkinleştirseniz bile, görev farklı bir Windows istasyonunda/masaüstü ortamında farklı önceliklerle çalışır. Sorunu belirlemek için, PowerShell kullanarak tüm görevleri gerçek öncelikleriyle listeleyebilirsiniz.:
38b7fa6c77dc344401485cd338ea4128
Görevlerimin neredeyse tamamı öncelikli olarak yürütüldü 7. Artık birkaç görevin önceliğini aynı anda özel olarak düzeltiyoruz:
38b7fa6c77dc344401485cd338ea4128
Önceliği ayarladıktan sonra 4 (Normalde) PHP betiğim beklenen 300 saniye içinde tekrar çalıştı. Görevleri belirli bir kullanıcı hesabıyla yapılandırdıysanız, bunu 10. satıra aşağıdaki gibi girmeniz yeterlidir.:
38b7fa6c77dc344401485cd338ea4128