Zamanlayıcı ilkeleri
Bu belge eşzamanlılık çalışma zamanında Zamanlayıcı ilkelerini açıklar. A Zamanlayıcı ilke görevleri yönetir, Zamanlayıcı kullanan stratejisi denetler. Örneğin, bazı görevleri sırasında yürütülecek gerektiren bir uygulama göz önünde THREAD_PRIORITY_NORMAL ve diğer görevleri sırasında yürütülecek THREAD_PRIORITY_HIGHEST. İki Zamanlayıcı örneklerini oluşturabilirsiniz: belirten bir ContextPriority ilkesinin THREAD_PRIORITY_NORMAL ve aynı ilkesinin belirten başka bir THREAD_PRIORITY_HIGHEST.
Zamanlayıcı ilkelerini kullanarak, geçerli işlem kaynakları ayırmak ve sabit bir kaynak kümesini her Zamanlayıcı atayın. Örneğin, dört işlemci ölçeklendirilemez paralel bir algoritma düşünün. Sınırlar görevlerinin en fazla dört işlemci aynı anda kullanmak için bir Zamanlayıcı ilkesi oluşturabilirsiniz.
İpucu
Eşzamanlılık zamanı varsayılan Zamanlayıcı sağlar.Bu nedenle, uygulamanızı oluşturmak zorunda değilsiniz.Görev Zamanlayıcı, uygulamalarınızın performansını hassas yardımcı olur çünkü ile başlatmanızı öneririz Paralel Desenler kitaplığının (ppl) veya Zaman uyumsuz aracıları kitaplığı eşzamanlılık çalýþma yeniyseniz.
Kullandığınızda concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create, veya concurrency::Scheduler::SetDefaultSchedulerPolicy yöntemi sağladığınız bir Zamanlayıcı kopyası oluşturmak için bir concurrency::SchedulerPolicy Zamanlayıcı davranışını belirleyen anahtar-değer çiftleri koleksiyonu içeren nesne. SchedulerPolicy Yapıcı sayılarda bağımsız değişken alır. İlk bağımsız değişken hakkında belirtmek üzere olduğunuz ilke öğelerini sayısıdır. Her ilke öğesi için anahtar-değer çiftleri kalan bağımsız değişkenlerdir. Aşağıdaki örnek oluşturur bir SchedulerPolicy üç ilke öğelerini belirtir nesnesi. Çalışma zamanı değil belirtilen ilke anahtarları için varsayılan değerleri kullanır.
SchedulerPolicy policy(3,
MinConcurrency, 2,
MaxConcurrency, 4,
ContextPriority, THREAD_PRIORITY_HIGHEST
);
Concurrency::PolicyElementKey numaralandırma Görev Zamanlayıcısı ile ilişkili ilke anahtarları tanımlar. İlke anahtarları ve bunların her biri için çalışma zamanı kullanır varsayılan değeri aşağıdaki tabloda açıklanmaktadır.
İlke anahtarı |
Description |
Varsayılan Değer |
---|---|---|
SchedulerKind |
A concurrency::SchedulerType görevleri zamanlamak için kullanılacak iş parçacığı türünü belirten değer. |
ThreadScheduler(normal iş parçacıkları kullanın). Bu anahtar için tek geçerli değer budur. |
MaxConcurrency |
Bir unsigned int scheduler kullanır eşzamanlılık kaynakların maksimum sayısını belirten değer. |
|
MinConcurrency |
Bir unsigned int Zamanlayıcı kullandığı eşzamanlılık kaynaklarının en az sayısını belirten değer. |
1 |
TargetOversubscriptionFactor |
Bir unsigned int her işleme kaynak tahsis etmek için kaç iş parçacıkları belirten değer. |
1 |
LocalContextCacheSize |
Bir unsigned int her sanal işlemcinin yerel sıra Önbelleğe alınabilecek içerikler en fazla sayısını belirten değer. |
8 |
ContextStackSize |
Bir unsigned int yığın boyutunu kilobayt olarak her içerik için ayrılacak belirten değer. |
0(varsayılan yığın boyutunu kullanın) |
ContextPriority |
Bir int her içerik iş parçacığının önceliğini belirten değer. Bunun için bünyesinde herhangi bir değer olabilir SetThreadPriority veya INHERIT_THREAD_PRIORITY. |
THREAD_PRIORITY_NORMAL |
SchedulingProtocol |
A concurrency::SchedulingProtocolType kullanmak için iş planlama çizelgeleme algoritması belirten değer. |
EnhanceScheduleGroupLocality |
DynamicProgressFeedback |
A concurrency::DynamicProgressFeedbackType istatistikleri temel ilerleme durumu bilgilerini kaynaklara göre yeniden dengelenmesi belirten değer. Not Bu ilke ayarlanmamışsa ProgressFeedbackDisabled çünkü çalışma zamanı tarafından kullanılmak üzere ayrılmıştır. |
ProgressFeedbackEnabled |
Görevleri zamanlarken her Zamanlayıcı kendi ilkesini kullanır. Bir Zamanlayıcı ile ilişkili ilkelerini başka bir Zamanlayıcı davranışını etkilemez. Ayrıca, oluşturduktan sonra Zamanlayıcı ilke değiştiremezsiniz Scheduler nesnesi.
Önemli
Yalnızca Zamanlayıcı ilkelerini nitelikleri, çalışma oluşturan iş parçacıkları için denetlemek için kullanın.İş parçacığının benzeşimi veya tanımsız davranışa neden olabilir çünkü çalışma zamanı tarafından oluşturulan iş parçacığı önceliğini değiştirme.
Size açıkça tane oluşturmazsanız, varsayılan Zamanlayıcı çalışma zamanı oluşturur. Uygulamanızın varsayılan Zamanlayıcı kullanmak istiyor ancak ilkeyi kullanmak için arama, Zamanlayıcı için belirtmek istediğiniz concurrency::Scheduler::SetDefaultSchedulerPolicy önce paralel iş planlama yöntemi. Çağrılmayan, Scheduler::SetDefaultSchedulerPolicy yöntemi, varsayılan ilke tablosundan değerleri çalışma zamanı kullanır.
Use concurrency::CurrentScheduler::GetPolicy ve concurrency::Scheduler::GetPolicy Zamanlayıcı İlkesi kopyasını almak için yöntemleri. Bu yöntemlerden aldığınız ilke değerlerini Zamanlayıcı oluştururken belirlediğiniz ilke değerleri farklı olabilir.
Örnek
Zamanlayıcı davranışını denetlemek için belirli bir Zamanlayıcı ilkeleri kullanma örnekleri incelemek için bkz: Nasıl yapılır: belirli Zamanlayıcı ilkeler belirleme ve Nasıl yapılır: belirli Zamanlayıcı ilkeleri kullanan aracıları oluşturma.
Ayrıca bkz.
Görevler
Nasıl yapılır: belirli Zamanlayıcı ilkeler belirleme
Nasıl yapılır: belirli Zamanlayıcı ilkeleri kullanan aracıları oluşturma