Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İş parçacıkları, zamanlama önceliğine göre çalışacak şekilde zamanlanır. Her iş parçacığına bir zamanlama önceliği atanır. Öncelik düzeyleri sıfırdan (en düşük öncelik) 31'e (en yüksek öncelik) kadar değişir. Yalnızca sıfır sayfalı iş parçacığının önceliği sıfır olabilir. (Sıfır sayfalı iş parçacığı, çalıştırılması gereken başka iş parçacığı olmadığında boş sayfaların sıfırlanmasından sorumlu bir sistem iş parçacığıdır.)
Sistem, tüm iş parçacıklarını aynı öncelikte eşit şekilde değerlendirir. Sistem, en yüksek önceliğe sahip tüm iş parçacıklarına döngüsel olarak zaman dilimleri atar. Bu iş parçacıklarının hiçbiri çalışmaya hazır değilse, sistem, bir sonraki en yüksek önceliğe sahip tüm iş parçacıklarına sıra tabanlı bir biçimde zaman dilimleri atar. Daha yüksek öncelikli bir iş parçacığı çalıştırılmaya kullanılabilir hale gelirse, sistem düşük öncelikli iş parçacığını yürütmeyi durdurur (zaman dilimini kullanmayı bitirmesine izin vermeden) ve yüksek öncelikli iş parçacığına tam zamanlı bir dilim atar. Daha fazla bilgi için Bağlam Değişimleribölümüne bakın.
Her bir iş parçacığının önceliği, aşağıdaki ölçütlere göre belirlenir.
- İşleminin öncelik sınıfı
- İş parçacığının, işlem öncelik sınıfı içindeki öncelik düzeyi
Öncelik sınıfı ve öncelik düzeyi, iş parçacığının temel öncelik oluşturmak için birleştirilir. Bir iş parçacığının dinamik önceliği hakkında bilgi için bkz. Priority Boosts.
Öncelik Sınıfı
Her işlem aşağıdaki öncelik sınıflarından birine aittir:
- IDLE_PRIORITY_CLASS
Normal Altı Öncelik Sınıfı
Normal_Öncelik_Sınıfı
NORMALİN ÜSTÜ ÖNCELİK SINIFI
HIGH_PRIORITY_CLASS
REALTIME_PRIORITY_CLASS
Varsayılan olarak, bir işlemin öncelik sınıfı NORMAL_PRIORITY_CLASS. Bir alt işlemin oluşturduğunuzda öncelik sınıfını belirtmek için CreateProcess işlevini kullanın. Çağrı işlemi IDLE_PRIORITY_CLASS veya BELOW_NORMAL_PRIORITY_CLASS ise, yeni işlem bu sınıfı devralır. bir işlemin geçerli öncelik sınıfını belirlemek için GetPriorityClass işlevini ve bir işlemin öncelik sınıfını değiştirmek için SetPriorityClassişlevinikullanın.
Ekran koruyucular veya bir ekranı düzenli aralıklarla güncelleştiren uygulamalar gibi sistemi izleyen işlemler IDLE_PRIORITY_CLASS kullanmalıdır. Bu, yüksek önceliğe sahip olmayan bu işlemin iş parçacıklarının daha yüksek öncelikli iş parçacıklarına müdahale etmesini engeller.
HIGH_PRIORITY_CLASS dikkatli kullanın. Bir iş parçacığı uzun süreler için en yüksek öncelik düzeyinde çalışıyorsa, sistemdeki diğer iş parçacıkları işlemci süresini alamaz. Aynı anda birden fazla iş parçacığı yüksek önceliğe ayarlanırsa, iş parçacıkları etkinliklerini kaybeder. Yüksek öncelikli sınıf, zaman açısından kritik olaylara yanıt vermesi gereken thread'ler için ayrılmalıdır. Uygulamanız yüksek öncelikli sınıfı gerektiren bir görev gerçekleştiriyorsa ve geri kalan görevleri normal öncelikliyse, uygulamanın öncelik sınıfını geçici olarak yükseltmek için SetPriorityClass kullanın; ardından zaman açısından kritik görev tamamlandıktan sonra bunu azaltın. Başka bir strateji, iş parçacıklarını çoğunlukla durduran ve yalnızca kritik görevler gerektiğinde onları uyandıran yüksek öncelikli bir işlem oluşturmaktır. Önemli nokta, yüksek öncelikli bir iş parçacığının ancak zaman açısından kritik bir işi olduğunda ve bu işin kısa bir süre için yürütülmesi gerektiğinde çalışması gerektiğidir.
Fare girişini, klavye girişini ve arka plan diski temizlemeyi yöneten sistem iş parçacıklarını kestiği için REALTIME_PRIORITY_CLASS neredeyse hiç kullanmamalısınız. Bu sınıf, doğrudan donanımla "konuşan" veya sınırlı kesintileri olması gereken kısa görevler gerçekleştiren uygulamalar için uygun olabilir.
Öncelik Düzeyi
Her öncelik sınıfındaki öncelik düzeyleri şunlardır:
- THREAD_PRIORITY_IDLE
THREAD_ONCELIK_EN_DUSUK
İP_ÖNCELİĞİ_NORMALİN_ALTINDA
THREAD_PRIORITY_NORMAL
NORMALİN ÜZERİNDE İŞ PARÇACIK ÖNCELİĞİ
İŞ_PARÇACIĞI_ÖNCELİĞİ_EN_YÜKSEK
THREAD_PRIORITY_TIME_CRITICAL
Tüm iş parçacıkları THREAD_PRIORITY_NORMAL kullanılarak oluşturulur. Bu, iş parçacığı önceliğinin işlem önceliği sınıfıyla aynı olduğu anlamına gelir. bir iş parçacığı oluşturduktan sonra, SetThreadPriority işlevini kullanarak işlemdeki diğer iş parçacıklarına göre önceliğini ayarlayın.
Tipik bir strateji, uygulamanın kullanıcıya yanıt vermesini sağlamak için işlemin giriş iş parçacığı için THREAD_PRIORITY_ABOVE_NORMAL veya THREAD_PRIORITY_HIGHEST kullanmaktır. Arka plan iş parçacıkları, özellikle işlemci yoğun olanlar, gerektiğinde kesintiye uğrayabilmelerini sağlamak için THREAD_PRIORITY_BELOW_NORMAL veya THREAD_PRIORITY_LOWEST olarak ayarlanabilir. Ancak, daha düşük önceliğe sahip başka bir iş parçacığının bir görevi tamamlamasını bekleyen bir iş parçacığınız varsa, bekleyen yüksek öncelikli iş parçacığının yürütülmesini engellediğinizden emin olun. Bunu yapmak için, bekleme işlevini, kritik bölümü veya Sleep işlevini, SleepExveya SwitchToThread işlevini kullanın. Bu, iş parçacığının bir döngü yürütmesi için tercih edilir. Aksi takdirde, daha düşük önceliğe sahip iş parçacığı hiçbir zaman zamanlanmadığı için, işlem çıkmaza girebilir.
İş parçacığının geçerli öncelik düzeyini belirlemek için GetThreadPriorityişlevinikullanın.
Temel Öncelik
İşlem öncelik sınıfı ve iş parçacığı öncelik düzeyi, her iş parçacığının temel önceliğini oluşturmak için birleştirilir.
Aşağıdaki tabloda, işlem öncelik sınıfı ve iş parçacığı öncelik değeri birleşimleri için temel öncelik gösterilmektedir.
| İşlem önceliği sınıfı | İş parçacığı öncelik düzeyi | Temel öncelik | |
|---|---|---|---|
| IDLE_PRIORITY_CLASS | THREAD_PRIORITY_IDLE | 1 | |
| EN_DÜŞÜK_ÖNCELİK | 2 | ||
| THREAD_PRIORITY_BELOW_NORMAL | 3 | ||
| İŞ PARÇACIĞI_ÖNCELİĞİ_NORMAL | 4 | ||
| THREAD_PRIORITY_ABOVE_NORMAL | 5 | ||
| İŞPARÇASI_ÖNCELİĞİ_ENYÜKSEK | 6 | ||
| THREAD_PRIORITY_ZAMAN_KRİTİK | 15 | ||
| Normal Altı Öncelik Sınıfı | THREAD_PRIORITY_IDLE | 1 | |
| EN_DÜŞÜK_İŞ_PARÇASI_ÖNCELİĞİ | 4 | ||
| İŞ PARÇACIĞI_ÖNCELİĞİ_NORMALİN_ALTINDA | 5 | ||
| THREAD_PRIORITY_NORMAL | 6 | ||
| THREAD_ÖNCELİĞİ_NORMALİN_ÜSTÜNDE | 7 | ||
| THREAD_PRIORITY_ENYÜKSEK | 8 | ||
| İŞ PARÇACIĞI_ÖNCELİĞİ_ZAMAN_KRİTİK | 15 | ||
| Normal_Öncelik_Sınıfı | THREAD_PRIORITY_IDLE | 1 | |
| THREAD_ÖNCELİK_EN_DÜŞÜK | 6 | ||
| İŞ PARÇACIĞI_ÖNCELİĞİ_NORMALİN_ALTINDA | 7 | ||
| İŞ PARÇASI_ÖNCELİĞİ_NORMAL | 8 | ||
| THREAD_PRIORITY_ABOVE_NORMAL | 9 | ||
| THREAD_PRIORITY_HIGHEST | 10 | ||
| THREAD_PRIORITY_TIME_CRITICAL (ZAMAN KRİTİK ÖNCELİĞİ) | 15 | ||
| Normalin Üstünde Öncelik Sınıfı | THREAD_PRIORITY_IDLE | 1 | |
| İŞ PARÇACIĞI_ÖNCELİK_EN DÜŞÜK | 8 | ||
| THREAD_PRIORITY_BELOW_NORMAL (Normal Altı Öncelik) | 9 | ||
| THREAD_PRIORITY_NORMAL (Normal Öncelik) | 10 | ||
| İP_ÖNCELİĞİ_NORMALİN_ÜSTÜNDE | 11 | ||
| İŞPARÇASI_ÖNCELİK_EN_YÜKSEK | 12 | ||
| THREAD_PRIORITY_TIME_CRITICAL | 15 | ||
| YÜKSEK_ÖNCELİKLİ_SINIF | THREAD_PRIORITY_IDLE | 1 | |
| THREAD_PRIORITY_LOWEST | 11 | ||
| İPLİK_ÖNCELİĞİ_NORMALİN_ALTINDA | 12 | ||
| KONU_ÖNCELİĞİ_NORMAL | 13 | ||
| İŞ PARÇACIĞI_ÖNCELİĞİ_NORMALİN_ÜSTÜNDE | 14 | ||
| THREAD_PRIORITY_EN_YÜKSEK (THREAD_PRIORITY_HIGHEST) | 15 | ||
| THREAD_PRIORITY_TIME_CRITICAL | 15 | ||
| Gerçekzamanlı Öncelik Sınıfı | Öncelik Düzeyi - Boşta | 16 | |
| EN DÜŞÜK İŞ PARÇACIĞI ÖNCELİĞİ | 22 | ||
| İŞ PARÇASI_ÖNCELİĞİ_NORMALİN_ALTINDA | 23 | ||
| THREAD_ÖNCELİK_NORMAL | 24 | ||
| THREAD_ÖNCELİĞİ_NORMALİN_ÜSTÜNDE | 25 | ||
| En Yüksek Öncelikli İş Parçacığı | 26 | ||
| THREAD_PRIORITY_TIME_CRITICAL | 31 | ||