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 NULL
sahipse 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 true
sahipse 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 MaxConcurrency
MinConcurrency
değ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 doSubscribeCurrentThread
true
olarak 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ı
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