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_HIGHEST
yü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_HIGHEST
belirtir.
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