Aracılığıyla paylaş


ISchedulerProxy Yapısı

Zamanlayıcıların kaynak ayırma anlaşması yapmak için Eşzamanlılık Çalışma Zamanının Resource Manager'ı ile iletişim kuracakları arabirim.

Sözdizimi

struct ISchedulerProxy;

Üyeler

Genel Yöntemler

Ad Tanım
ISchedulerProxy::BindContext Henüz bir iş parçacığı ara sunucusuyla ilişkilendirilmemişse yürütme bağlamını ilişkilendirir.
ISchedulerProxy::CreateOversubscriber Mevcut bir yürütme kaynağıyla ilişkili donanım iş parçacığında yeni bir sanal işlemci kökü oluşturur.
ISchedulerProxy::RequestInitialVirtualProcessors Sanal işlemci köklerinin ilk ayırmayı istemektedir. Her sanal işlemci kökü, zamanlayıcı için iş gerçekleştirebilen bir iş parçacığı yürütme özelliğini temsil eder.
ISchedulerProxy::Shutdown Resource Manager'a zamanlayıcının kapatıldığını bildirir. Bu, Resource Manager'ın zamanlayıcıya verilen tüm kaynakları hemen geri kazanmasına neden olur.
ISchedulerProxy::SubscribeCurrentThread Geçerli iş parçacığını Resource Manager'a kaydederek bu zamanlayıcıyla ilişkilendirer.
ISchedulerProxy::UnbindContext Bir iş parçacığı ara sunucusunu parametresi tarafından belirtilen yürütme bağlamından pContext ayırır ve iş parçacığı proxy fabrikasının boş havuzuna döndürür. Bu yöntem yalnızca ISchedulerProxy::BindContext yöntemi aracılığıyla bağlanan ve henüz bir IThreadProxy::SwitchTo yöntem çağrısının parametresi olarak pContext başlatılmamış bir yürütme bağlamında çağrılabilir.

Açıklamalar

Resource Manager, IResourceManager::RegisterScheduler yöntemini kullanarak ona kaydolan her zamanlayıcıya bir ISchedulerProxy arabirim sağlar.

Devralma Hiyerarşisi

ISchedulerProxy

Gereksinimler

Üst bilgi: concrtrm.h

Ad alanı: eşzamanlılık

ISchedulerProxy::BindContext Yöntemi

Henüz bir iş parçacığı ara sunucusuyla ilişkilendirilmemişse yürütme bağlamını ilişkilendirir.

virtual void BindContext(_Inout_ IExecutionContext* pContext) = 0;

Parametreler

Pcontext
Bir iş parçacığı ara sunucusuyla ilişkilendirilecek yürütme bağlamı arabirimi.

Açıklamalar

Normalde, IThreadProxy::SwitchTo yöntemi bir iş parçacığı ara sunucusunu isteğe bağlı olarak yürütme bağlamı için bağlar. Ancak, yöntemin zaten bağlı bir bağlama geçtiğinden emin olmak için bir bağlamı önceden bağlamanın SwitchTo gerekli olduğu durumlar vardır. Bellek ayıran yöntemleri çağıramadığı için UMS zamanlama bağlamında bu durum geçerlidir ve iş parçacığı ara sunucusu, iş parçacığı proxy fabrikasının boş havuzunda kullanılabilir değilse iş parçacığı ara sunucusunun bağlanması bellek ayırmayı içerebilir.

invalid_argument parametresi pContext değerine NULLsahipse oluşturulur.

ISchedulerProxy::CreateOversubscriber Yöntemi

Mevcut bir yürütme kaynağıyla ilişkili donanım iş parçacığında yeni bir sanal işlemci kökü oluşturur.

virtual IVirtualProcessorRoot* CreateOversubscriber(_Inout_ IExecutionResource* pExecutionResource) = 0;

Parametreler

pExecutionResource
IExecutionResource Fazla abonelik yapmak istediğiniz donanım iş parçacığını temsil eden bir arabirim.

İade Değeri

Bir IVirtualProcessorRoot arabirim.

Açıklamalar

Zamanlayıcınız belirli bir donanım iş parçacığını sınırlı bir süre için fazla abonelikten çıkarmak istediğinde bu yöntemi kullanın. Sanal işlemci köküyle işiniz bittiğinde, arabirimde Remove yöntemini çağırarak bunu kaynak yöneticisine IVirtualProcessorRoot döndürmeniz gerekir.

Arabirim arabirimden IExecutionResource devraldığından, var olan bir sanal işlemci kökünü IVirtualProcessorRoot bile fazla abone yapabilirsiniz.

ISchedulerProxy::RequestInitialVirtualProcessors Yöntemi

Sanal işlemci köklerinin ilk ayırmayı istemektedir. Her sanal işlemci kökü, zamanlayıcı için iş gerçekleştirebilen bir iş parçacığı yürütme özelliğini temsil eder.

virtual IExecutionResource* RequestInitialVirtualProcessors(bool doSubscribeCurrentThread) = 0;

Parametreler

doSubscribeCurrentThread
Kaynak ayırma sırasında geçerli iş parçacığının abone olup olmadığı ve hesaba katılıp bağlanmayacağı.

İade Değeri

IExecutionResource parametresi doSubscribeCurrentThread değerine truesahipse geçerli iş parçacığı arabirimi. değer ise false, yöntemi NULL döndürür.

Açıklamalar

Zamanlayıcı herhangi bir çalışmayı yürütmeden önce Resource Manager'dan sanal işlemci kökleri istemek için bu yöntemi kullanmalıdır. Resource Manager, IScheduler::GetPolicy kullanarak zamanlayıcının ilkesine erişecek ve ilke anahtarlarının MaxConcurrencyMinConcurrencydeğerlerini kullanacak ve TargetOversubscriptionFactor zamanlayıcıya başlangıçta kaç donanım iş parçacığı atanacağını ve her donanım iş parçacığı için kaç sanal işlemci kökü oluşturulacağını belirler. Zamanlayıcı ilkelerinin zamanlayıcının ilk ayırmasını belirlemek için nasıl kullanıldığı hakkında daha fazla bilgi için bkz . PolicyElementKey.

Resource Manager, sanal işlemci köklerinin listesiyle IScheduler::AddVirtualProcessors yöntemini çağırarak bir zamanlayıcıya kaynak verir. yöntemi, bu yöntem döndürmeden önce zamanlayıcıya geri çağırma olarak çağrılır.

Zamanlayıcı parametresini doSubscribeCurrentThreadtrueolarak ayarlayarak geçerli iş parçacığı için abonelik istediyse, yöntemi bir IExecutionResource arabirim döndürür. IExecutionResource::Remove yöntemi kullanılarak aboneliğin daha sonraki bir noktada sonlandırılması gerekir.

Hangi donanım iş parçacıklarının seçildiğini belirlerken Resource Manager, işlemci düğümü benzimi için iyileştirmeyi dener. Geçerli iş parçacığı için abonelik istenirse, geçerli iş parçacığının bu zamanlayıcıya atanan çalışmaya katılmayı amaçladığının bir göstergesidir. Böyle bir durumda, ayrılan sanal işlemci kökleri mümkünse geçerli iş parçacığının üzerinde yürütülmekte olduğu işlemci düğümünde bulunur.

bir iş parçacığı abone eylemi, temel alınan donanım iş parçacığının abonelik düzeyini bir artırır. Abonelik sonlandırıldığında abonelik düzeyi bir azaltılır. Abonelik düzeyleri hakkında daha fazla bilgi için bkz . IExecutionResource::CurrentSubscriptionLevel.

ISchedulerProxy::Shutdown Yöntemi

Resource Manager'a zamanlayıcının kapatıldığını bildirir. Bu, Resource Manager'ın zamanlayıcıya verilen tüm kaynakları hemen geri kazanmasına neden olur.

virtual void Shutdown() = 0;

Açıklamalar

Zamanlayıcının yöntemleri kullanarak bir dış iş parçacığına abone olması sonucunda aldığı tüm IExecutionContext arabirimler ISchedulerProxy::RequestInitialVirtualProcessors veya ISchedulerProxy::SubscribeCurrentThread zamanlayıcının kendisini kapatmadan önce kullanılarak IExecutionResource::Remove Resource Manager'a döndürülmelidir.

Zamanlayıcınızın devre dışı bırakılmış sanal işlemci kökleri varsa, IVirtualProcessorRoot::Activate kullanarak bunları etkinleştirmeniz ve bir zamanlayıcı ara sunucusuna çağırmadan Shutdown önce iş parçacığı proxy'lerinin üzerinde yürütülmesini sağlamanız ve gönderdikleri yürütme bağlamlarının yöntemini bırakmanız Dispatch gerekir.

Zamanlayıcının, Resource Manager'ın kendisine verilen tüm sanal işlemci köklerini yöntemine yapılan çağrılar Remove aracılığıyla tek tek döndürmesi gerekmez, çünkü tüm sanal işlemci kökleri kapatılırken Resource Manager'a döndürülür.

ISchedulerProxy::SubscribeCurrentThread Yöntemi

Geçerli iş parçacığını Resource Manager'a kaydederek bu zamanlayıcıyla ilişkilendirer.

virtual IExecutionResource* SubscribeCurrentThread() = 0;

İade Değeri

Çalışma IExecutionResource zamanındaki geçerli iş parçacığını temsil eden birlikte çalışma zamanı.

Açıklamalar

Kaynakları zamanlayıcınıza ve diğer zamanlayıcılara ayırırken Resource Manager'ın geçerli iş parçacığını hesaba eklemesini istiyorsanız bu yöntemi kullanın. İş parçacığı, zamanlayıcının Resource Manager'dan aldığı sanal işlemci kökleriyle birlikte zamanlayıcınıza kuyruğa alınan çalışmaya katılmayı planladığında özellikle yararlıdır. Resource Manager, sistemdeki donanım iş parçacıklarının gereksiz şekilde aşırı abone olmasını önlemek için bilgileri kullanır.

Bu yöntemle alınan yürütme kaynağı, IExecutionResource::Remove yöntemi kullanılarak Resource Manager'a döndürülmelidir. yöntemini çağıran Remove iş parçacığı, daha önce yöntemini çağıran iş parçacığı olmalıdır SubscribeCurrentThread .

bir iş parçacığı abone eylemi, temel alınan donanım iş parçacığının abonelik düzeyini bir artırır. Abonelik sonlandırıldığında abonelik düzeyi bir azaltılır. Abonelik düzeyleri hakkında daha fazla bilgi için bkz . IExecutionResource::CurrentSubscriptionLevel.

ISchedulerProxy::UnbindContext Yöntemi

Bir iş parçacığı ara sunucusunu parametresi tarafından belirtilen yürütme bağlamından pContext ayırır ve iş parçacığı proxy fabrikasının boş havuzuna döndürür. Bu yöntem yalnızca ISchedulerProxy::BindContext yöntemi aracılığıyla bağlanan ve henüz bir IThreadProxy::SwitchTo yöntem çağrısının parametresi olarak pContext başlatılmamış bir yürütme bağlamında çağrılabilir.

virtual void UnbindContext(_Inout_ IExecutionContext* pContext) = 0;

Parametreler

Pcontext
İş parçacığı ara sunucusuyla ilişkilendirmek için yürütme bağlamı.

Ayrıca bkz.

Eşzamanlılık Ad Alanı
IScheduler Yapısı
IThreadProxy Yapısı
IVirtualProcessorRoot Yapısı
IResourceManager Yapısı