Zamanlayıcı İlkeleri

Bu belgede Eşzamanlılık Çalışma Zamanı'nda zamanlayıcı ilkelerinin rolü açıklanmaktadır. Zamanlayıcı ilkesi, zamanlayıcının görevleri yönetirken kullandığı stratejiyi denetler. Örneğin, konumunda bazı görevlerin yürütülmesini ve diğer görevlerin konumunda THREAD_PRIORITY_NORMAL THREAD_PRIORITY_HIGHESTyürütülmesini gerektiren bir uygulamayı düşünün. İki zamanlayıcı örneği oluşturabilirsiniz: biri olacak THREAD_PRIORITY_NORMAL ilkeyiContextPriority, diğeri ise aynı ilkeyi THREAD_PRIORITY_HIGHESTbelirtir.

Zamanlayıcı ilkelerini kullanarak, kullanılabilir işleme kaynaklarını bölebilir ve her zamanlayıcıya sabit bir kaynak kümesi atayabilirsiniz. Örneğin, dört işlemcinin ötesine ölçeklendirilmeyen paralel bir algoritma düşünün. Görevlerini aynı anda en fazla dört işlemci kullanacak şekilde sınırlayan bir zamanlayıcı ilkesi oluşturabilirsiniz.

İpucu

Eşzamanlılık Çalışma Zamanı varsayılan bir zamanlayıcı sağlar. Bu nedenle, uygulamanızda bir tane oluşturmanız gerekmez. Görev Zamanlayıcı, uygulamalarınızın performansında ince ayarlamalar yapmanızı sağladığından Eşzamanlılık Çalışma Zamanı'nı kullanmaya yeni başladıysanız Paralel Desenler Kitaplığı (PPL) veya Zaman Uyumsuz Aracılar Kitaplığı ile başlamanızı öneririz.

Zamanlayıcı örneği oluşturmak için eşzamanlılık::CurrentScheduler::Create, concurrency::Scheduler::Create veya concurrency::Scheduler::SetDefaultSchedulerPolicy yöntemini kullandığınızda, zamanlayıcının davranışını belirten anahtar-değer çiftleri koleksiyonunu içeren bir eşzamanlılık::SchedulerPolicy nesnesi sağlarsınız. Oluşturucu değişken SchedulerPolicy sayıda bağımsız değişken alır. İlk bağımsız değişken, belirtmek üzere olduğunuz ilke öğelerinin sayısıdır. Kalan bağımsız değişkenler, her ilke öğesi için anahtar-değer çiftleridir. Aşağıdaki örnek, üç ilke öğesi belirten bir SchedulerPolicy nesne oluşturur. Çalışma zamanı, belirtilmeyen ilke anahtarları için varsayılan değerleri kullanır.

SchedulerPolicy policy(3,       
   MinConcurrency, 2,
   MaxConcurrency, 4,
   ContextPriority, THREAD_PRIORITY_HIGHEST
);

concurrency::P olicyElementKey sabit listesi, Görev Zamanlayıcı ile ilişkili ilke anahtarlarını tanımlar. Aşağıdaki tabloda, çalışma zamanının her biri için kullandığı ilke anahtarları ve varsayılan değer açıklanmaktadır.

İlke Anahtarı Açıklama Varsayılan Değer
SchedulerKind Görevleri zamanlamak için kullanılacak iş parçacığı türünü belirten concurrency::SchedulerType değeri. ThreadScheduler (normal iş parçacıkları kullanın). Bu anahtar için tek geçerli değer budur.
MaxConcurrency unsigned int Zamanlayıcının kullandığı en fazla eşzamanlılık kaynağı sayısını belirten değer. concurrency::MaxExecutionResources
MinConcurrency unsigned int Zamanlayıcının kullandığı en az eşzamanlılık kaynağı sayısını belirten değer. 1
TargetOversubscriptionFactor unsigned int Her işleme kaynağına ayrılacak iş parçacığı sayısını belirten bir değer. 1
LocalContextCacheSize unsigned int Her sanal işlemcinin yerel kuyruğunda önbelleğe alınabilecek bağlam sayısı üst sınırını belirten bir değer. 8
ContextStackSize unsigned int Her bağlam için ayıracak yığının boyutunu kilobayt cinsinden belirten bir değer. 0 (varsayılan yığın boyutunu kullanın)
ContextPriority int Her bağlamın iş parçacığı önceliğini belirten bir değer. Bu, SetThreadPriority veya INHERIT_THREAD_PRIORITYöğesine geçirebileceğiniz herhangi bir değer olabilir. THREAD_PRIORITY_NORMAL
SchedulingProtocol Kullanılacak zamanlama algoritmasını belirten concurrency::SchedulingProtocolType değeri. EnhanceScheduleGroupLocality
DynamicProgressFeedback İstatistik tabanlı ilerleme bilgilerine göre kaynakların yeniden dengelenip dengelenmeyeceğini belirten concurrency::D ynamicProgressFeedbackType değeri.

Not Çalışma zamanı tarafından kullanılmak üzere ProgressFeedbackDisabled ayrıldığından bu ilkeyi olarak ayarlamayın.
ProgressFeedbackEnabled

Her zamanlayıcı, görevleri zamanlarken kendi ilkesini kullanır. Bir zamanlayıcıyla ilişkilendirilmiş ilkeler, diğer zamanlayıcıların davranışını etkilemez. Ayrıca, nesneyi oluşturduktan Scheduler sonra zamanlayıcı ilkesini değiştiremezsiniz.

Önemli

Çalışma zamanının oluşturduğu iş parçacıklarının özniteliklerini denetlemek için yalnızca zamanlayıcı ilkelerini kullanın. Tanımlanmamış davranışa neden olabileceğinden, çalışma zamanı tarafından oluşturulan iş parçacıklarının iş parçacığı benzimliğini veya önceliğini değiştirmeyin.

Açıkça oluşturmazsanız çalışma zamanı sizin için varsayılan bir zamanlayıcı oluşturur. Uygulamanızda varsayılan zamanlayıcıyı kullanmak istiyorsanız ancak bu zamanlayıcının kullanması için bir ilke belirtmek istiyorsanız, paralel çalışmayı zamanlamadan önce concurrency::Scheduler::SetDefaultSchedulerPolicy yöntemini çağırın. yöntemini çağırmazsanız Scheduler::SetDefaultSchedulerPolicy , çalışma zamanı tablodan varsayılan ilke değerlerini kullanır.

Zamanlayıcı ilkesinin bir kopyasını almak için eşzamanlılık::CurrentScheduler::GetPolicy ve eşzamanlılık::Scheduler::GetPolicy yöntemlerini kullanın. Bu yöntemlerden aldığınız ilke değerleri, zamanlayıcıyı oluştururken belirttiğiniz ilke değerlerinden farklı olabilir.

Örnek

Zamanlayıcının davranışını denetlemek için belirli zamanlayıcı ilkelerini kullanan örnekleri incelemek için bkz . Nasıl yapılır: Belirli Zamanlayıcı İlkelerini Belirtme ve Nasıl yapılır: Belirli Zamanlayıcı İlkelerini Kullanan Aracılar Oluşturma.

Ayrıca bkz.

Görev Zamanlayıcı
Nasıl yapılır: Belirli Zamanlayıcı İlkeleri Belirtme
Nasıl yapılır: Belirli Zamanlayıcı İlkelerini Kullanan Aracılar Oluşturma