Aracılığıyla paylaş


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ı