IScheduler Yapısı
İş zamanlayıcısının soyutlamasına yönelik arabirim. Eşzamanlılık Çalışma Zamanı'nın Resource Manager'ı, iş zamanlayıcılarıyla iletişim kurmak için bu arabirimi kullanır.
Sözdizimi
struct IScheduler;
Üyeler
Genel Yöntemler
Ad | Tanım |
---|---|
IScheduler::AddVirtualProcessors | Kullanımı için bir dizi sanal işlemci kökü içeren bir zamanlayıcı sağlar. Her IVirtualProcessorRoot arabirim, zamanlayıcı adına iş gerçekleştirebilen tek bir iş parçacığı yürütme hakkını temsil eder. |
IScheduler::GetId | Zamanlayıcı için benzersiz bir tanımlayıcı döndürür. |
IScheduler::GetPolicy | Zamanlayıcı ilkesinin bir kopyasını döndürür. Zamanlayıcı ilkeleri hakkında daha fazla bilgi için bkz . SchedulerPolicy. |
IScheduler::NotifyResourcesExternallyBusy | Bu zamanlayıcıya, dizideki ppVirtualProcessorRoots sanal işlemci kökleri kümesiyle temsil edilen donanım iş parçacıklarının artık diğer zamanlayıcılar tarafından kullanıldığını bildirir. |
IScheduler::NotifyResourcesExternallyIdle | Bu zamanlayıcıya, dizideki ppVirtualProcessorRoots sanal işlemci kökleri kümesi tarafından temsil edilen donanım iş parçacıklarının diğer zamanlayıcılar tarafından kullanılmadığını bildirir. |
IScheduler::RemoveVirtualProcessors | Daha önce bu zamanlayıcıya ayrılmış sanal işlemci köklerinin kaldırılmasını başlatır. |
IScheduler::statistics | Görev varış ve tamamlanma oranları ve zamanlayıcı için kuyruk uzunluğu değişikliğiyle ilgili bilgiler sağlar. |
Açıklamalar
Resource Manager ile iletişim kuran özel bir zamanlayıcı uyguluyorsanız arabiriminin IScheduler
bir uygulamasını sağlamanız gerekir. Bu arabirim, bir zamanlayıcı ile Resource Manager arasındaki iki yönlü iletişim kanalının bir ucudur. Diğer uç, Resource Manager tarafından IResourceManager
uygulanan ve ISchedulerProxy
arabirimleriyle temsil edilir.
Devralma Hiyerarşisi
IScheduler
Gereksinimler
Üst bilgi: concrtrm.h
Ad alanı: eşzamanlılık
IScheduler::AddVirtualProcessors Yöntemi
Kullanımı için bir dizi sanal işlemci kökü içeren bir zamanlayıcı sağlar. Her IVirtualProcessorRoot
arabirim, zamanlayıcı adına iş gerçekleştirebilen tek bir iş parçacığı yürütme hakkını temsil eder.
virtual void AddVirtualProcessors(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parametreler
ppVirtualProcessorRoots
Zamanlayıcıya IVirtualProcessorRoot
eklenen sanal işlemci köklerini temsil eden bir arabirim dizisi.
count
Dizideki arabirimlerin IVirtualProcessorRoot
sayısı.
Açıklamalar
Resource Manager, bir zamanlayıcıya ilk sanal işlemci kökleri kümesini vermek için yöntemini çağırır AddVirtualProcessor
. Zamanlayıcılar arasında kaynakları yeniden dengelediğinde zamanlayıcıya sanal işlemci kökleri eklemek için yöntemini de çağırabilir.
IScheduler::GetId Yöntemi
Zamanlayıcı için benzersiz bir tanımlayıcı döndürür.
virtual unsigned int GetId() const = 0;
İade Değeri
Benzersiz bir tamsayı tanımlayıcısı.
Açıklamalar
Arabirimi Resource Manager tarafından sağlanan yöntemlere parametre olarak kullanmadan önce, arabirimi uygulayan IScheduler
nesne için benzersiz bir tanımlayıcı elde etmek için GetSchedulerId işlevini kullanmanız gerekir. İşlev çağrıldığında aynı tanımlayıcıyı döndürmeniz GetId
beklenir.
Farklı bir kaynaktan alınan bir tanımlayıcı tanımsız davranışa neden olabilir.
IScheduler::GetPolicy Yöntemi
Zamanlayıcı ilkesinin bir kopyasını döndürür. Zamanlayıcı ilkeleri hakkında daha fazla bilgi için bkz . SchedulerPolicy.
virtual SchedulerPolicy GetPolicy() const = 0;
İade Değeri
Zamanlayıcı ilkesinin bir kopyası.
IScheduler::NotifyResourcesExternallyBusy Yöntemi
Bu zamanlayıcıya, dizideki ppVirtualProcessorRoots
sanal işlemci kökleri kümesiyle temsil edilen donanım iş parçacıklarının artık diğer zamanlayıcılar tarafından kullanıldığını bildirir.
virtual void NotifyResourcesExternallyBusy(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parametreler
ppVirtualProcessorRoots
Diğer zamanlayıcıların IVirtualProcessorRoot
meşgul olduğu donanım iş parçacıklarıyla ilişkili arabirim dizisi.
count
Dizideki arabirimlerin IVirtualProcessorRoot
sayısı.
Açıklamalar
Belirli bir donanım iş parçacığının aynı anda birden çok zamanlayıcıya atanabilir. Bunun bir nedeni, sistem üzerinde kaynakları paylaşmadan tüm zamanlayıcılar için en düşük eşzamanlılığı karşılamak için yeterli donanım iş parçacığı olmaması olabilir. Bir diğer olasılık da, sahip olan zamanlayıcı bunları kullanmadığında kaynakların geçici olarak diğer zamanlayıcılara atanmasıdır. Bu sayede bu donanım iş parçacığındaki tüm sanal işlemci kökleri devre dışı bırakılır.
Bir donanım iş parçacığının abonelik düzeyi, abone olunan iş parçacıklarının sayısı ve bu donanım iş parçacığıyla ilişkili etkinleştirilmiş sanal işlemci kökleri ile belirtilir. Belirli bir zamanlayıcı açısından bakıldığında, donanım iş parçacığının dış abonelik düzeyi, diğer zamanlayıcıların katkıda bulunan aboneliğin bölümüdür. Bir donanım iş parçacığının dış abonelik düzeyi sıfırdan pozitif bölgeye geçtiğinde kaynakların dışarıdan meşgul olduğuna ilişkin bildirimler bir zamanlayıcıya gönderilir.
Bu yöntemle yapılan bildirimler yalnızca ilke anahtarının değerinin ilke anahtarının değerine MinConcurrency
eşit olduğu bir ilkeye sahip zamanlayıcılara MaxConcurrency
gönderilir. Zamanlayıcı ilkeleri hakkında daha fazla bilgi için bkz . SchedulerPolicy.
Bildirimler için uygun olan bir zamanlayıcı, oluşturulduğu sırada bir dizi ilk bildirim alır ve yeni atandığı kaynakların dışarıda meşgul veya boşta olup olmadığını bildirir.
IScheduler::NotifyResourcesExternallyIdle Yöntemi
Bu zamanlayıcıya, dizideki ppVirtualProcessorRoots
sanal işlemci kökleri kümesi tarafından temsil edilen donanım iş parçacıklarının diğer zamanlayıcılar tarafından kullanılmadığını bildirir.
virtual void NotifyResourcesExternallyIdle(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parametreler
ppVirtualProcessorRoots
Diğer zamanlayıcıların IVirtualProcessorRoot
boşta olduğu donanım iş parçacıklarıyla ilişkili arabirim dizisi.
count
Dizideki arabirimlerin IVirtualProcessorRoot
sayısı.
Açıklamalar
Belirli bir donanım iş parçacığının aynı anda birden çok zamanlayıcıya atanabilir. Bunun bir nedeni, sistem üzerinde kaynakları paylaşmadan tüm zamanlayıcılar için en düşük eşzamanlılığı karşılamak için yeterli donanım iş parçacığı olmaması olabilir. Bir diğer olasılık da, sahip olan zamanlayıcı bunları kullanmadığında kaynakların geçici olarak diğer zamanlayıcılara atanmasıdır. Bu sayede bu donanım iş parçacığındaki tüm sanal işlemci kökleri devre dışı bırakılır.
Bir donanım iş parçacığının abonelik düzeyi, abone olunan iş parçacıklarının sayısı ve bu donanım iş parçacığıyla ilişkili etkinleştirilmiş sanal işlemci kökleri ile belirtilir. Belirli bir zamanlayıcı açısından bakıldığında, donanım iş parçacığının dış abonelik düzeyi, diğer zamanlayıcıların katkıda bulunan aboneliğin bölümüdür. Bir donanım iş parçacığının dış abonelik düzeyi önceki pozitif değerden sıfıra düştüğünde kaynakların dış olarak meşgul olduğuna ilişkin bildirimler bir zamanlayıcıya gönderilir.
Bu yöntemle yapılan bildirimler yalnızca ilke anahtarının değerinin ilke anahtarının değerine MinConcurrency
eşit olduğu bir ilkeye sahip zamanlayıcılara MaxConcurrency
gönderilir. Zamanlayıcı ilkeleri hakkında daha fazla bilgi için bkz . SchedulerPolicy.
Bildirimler için uygun olan bir zamanlayıcı, oluşturulduğu sırada bir dizi ilk bildirim alır ve yeni atandığı kaynakların dışarıda meşgul veya boşta olup olmadığını bildirir.
IScheduler::RemoveVirtualProcessors Yöntemi
Daha önce bu zamanlayıcıya ayrılmış sanal işlemci köklerinin kaldırılmasını başlatır.
virtual void RemoveVirtualProcessors(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parametreler
ppVirtualProcessorRoots
Kaldırılacak sanal işlemci köklerini temsil eden bir arabirim dizisi IVirtualProcessorRoot
.
count
Dizideki arabirimlerin IVirtualProcessorRoot
sayısı.
Açıklamalar
Resource Manager, bir zamanlayıcıdan bir dizi sanal işlemci kökünü geri almak için yöntemini çağırır RemoveVirtualProcessors
. Zamanlayıcının sanal işlemci kökleriyle tamamlandığında her arabirimde Remove yöntemini çağırması beklenir. yöntemini çağırdıktan Remove
sonra arabirimi IVirtualProcessorRoot
kullanmayın.
parametresi ppVirtualProcessorRoots
bir dizi arabirime işaret eder. Kaldırılacak sanal işlemci kökleri kümesi arasında, kökler hiçbir zaman etkinleştirilmedi yöntemi kullanılarak Remove
hemen döndürülebilir. Etkinleştirilen ve işi yürüten veya devre dışı bırakılan ve çalışmanın gelmesini bekleyen kökler zaman uyumsuz olarak döndürülmelidir. Zamanlayıcı, sanal işlemci kökünü mümkün olan en kısa sürede kaldırmak için her girişimi yapmalıdır. Sanal işlemci köklerinin kaldırılmasının geciktirilmesi zamanlayıcı içinde yanlışlıkla fazla abonelik yapılmasına neden olabilir.
IScheduler::Statistics Yöntemi
Görev varış ve tamamlanma oranları ve zamanlayıcı için kuyruk uzunluğu değişikliğiyle ilgili bilgiler sağlar.
virtual void Statistics(
_Out_ unsigned int* pTaskCompletionRate,
_Out_ unsigned int* pTaskArrivalRate,
_Out_ unsigned int* pNumberOfTasksEnqueued) = 0;
Parametreler
pTaskCompletionRate
Bu yönteme yapılan son çağrıdan bu yana zamanlayıcı tarafından tamamlanan görevlerin sayısı.
pTaskArrivalRate
Bu yönteme yapılan son çağrıdan sonra zamanlayıcıya ulaşan görevlerin sayısı.
pNumberOfTasksEnqueued
Tüm zamanlayıcı kuyruklarındaki toplam görev sayısı.
Açıklamalar
Bu yöntem, bir zamanlayıcının istatistiklerini toplamak için Resource Manager tarafından çağrılır. Burada toplanan istatistikler, zamanlayıcıya daha fazla kaynak atamanın ne zaman uygun olduğunu ve kaynakların ne zaman kaldırılacağını belirlemek için dinamik geri bildirim algoritmalarını yönlendirmek için kullanılacaktır. Zamanlayıcı tarafından sağlanan değerler iyimser olabilir ve geçerli sayıyı doğru yansıtması gerekmez.
Resource Manager'ın, kaynak zamanlayıcınızla Resource Manager'a kayıtlı diğer zamanlayıcılar arasında nasıl dengeleneceğini belirlemek için görev gelişi gibi konularda geri bildirim kullanmasını istiyorsanız bu yöntemi uygulamanız gerekir. İstatistikleri toplamamayı seçerseniz, ilke anahtarını DynamicProgressFeedback
zamanlayıcınızın ilkesindeki değere DynamicProgressFeedbackDisabled
ayarlayabilirsiniz ve Resource Manager zamanlayıcınızda bu yöntemi çağırmaz.
İstatistiksel bilgilerin olmaması durumunda Resource Manager, kaynak ayırma ve geçiş kararları almak için donanım iş parçacığı abonelik düzeylerini kullanır. Abonelik düzeyleri hakkında daha fazla bilgi için bkz . IExecutionResource::CurrentSubscriptionLevel.
Ayrıca bkz.
Eşzamanlılık Ad Alanı
PolicyElementKey
SchedulerPolicy Sınıfı
IExecutionContext Yapısı
IThreadProxy Yapısı
IVirtualProcessorRoot Yapısı
IResourceManager Yapısı
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin