IExecutionResource Yapısı
Donanım iş parçacığı için soyutlama.
Sözdizimi
struct IExecutionResource;
Üyeler
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
IExecutionResource::CurrentSubscriptionLevel | Şu anda bu yürütme kaynağının temsil ettiği temel donanım iş parçacığıyla ilişkili etkinleştirilmiş sanal işlemci köklerinin ve abone olunan dış iş parçacıklarının sayısını döndürür. |
IExecutionResource::GetExecutionResourceId | Bu yürütme kaynağının temsil ettiği donanım iş parçacığı için benzersiz bir tanımlayıcı döndürür. |
IExecutionResource::GetNodeId | Bu yürütme kaynağının ait olduğu işlemci düğümü için benzersiz bir tanımlayıcı döndürür. |
IExecutionResource::Remove | Bu yürütme kaynağını Resource Manager'a döndürür. |
Açıklamalar
Yürütme kaynakları tek başına veya sanal işlemci kökleriyle ilişkilendirilebilir. Uygulamanızdaki bir iş parçacığı iş parçacığı aboneliği oluşturduğunda tek başına yürütme kaynağı oluşturulur. ISchedulerProxy::SubscribeThread ve ISchedulerProxy::RequestInitialVirtualProcessors yöntemleri iş parçacığı abonelikleri oluşturur ve aboneliği temsil eden bir IExecutionResource
arabirim döndürür. İş parçacığı aboneliği oluşturmak, Resource Manager'ın zamanlayıcıya atamış olduğu sanal işlemci kökleri ile birlikte belirli bir iş parçacığının bir zamanlayıcıya kuyruğa alınan işe katılacağını Resource Manager'a bildirmenin bir yoludur. Resource Manager, donanım iş parçacıklarının mümkün olduğunca fazla abone olmasını önlemek için bu bilgileri kullanır.
Devralma Hiyerarşisi
IExecutionResource
Gereksinimler
Üst bilgi: concrtrm.h
Ad alanı: eşzamanlılık
IExecutionResource::CurrentSubscriptionLevel Yöntemi
Şu anda bu yürütme kaynağının temsil ettiği temel donanım iş parçacığıyla ilişkili etkinleştirilmiş sanal işlemci köklerinin ve abone olunan dış iş parçacıklarının sayısını döndürür.
virtual unsigned int CurrentSubscriptionLevel() const = 0;
Dönüş Değeri
Geçerli abonelik düzeyi.
Açıklamalar
Abonelik düzeyi, donanım iş parçacığıyla ilişkili çalışan iş parçacığı sayısını bildirir. Bu yalnızca Resource Manager'ın abone olunan iş parçacıkları biçiminde farkında olduğu iş parçacıklarını ve iş parçacığı proxy'lerini etkin bir şekilde yürüten sanal işlemci köklerini içerir.
ISchedulerProxy::SubscribeCurrentThread yöntemini veya parametresi doSubscribeCurrentThread
değere true
ayarlanmış ISchedulerProxy::RequestInitialVirtualProcessors yöntemini çağırmak, donanım iş parçacığının abonelik düzeyini bir artırır. Ayrıca aboneliği temsil eden bir IExecutionResource
arabirim döndürür. IExecutionResource::Remove öğesine karşılık gelen bir çağrı, donanım iş parçacığının abonelik düzeyini bire bir kaldırır.
IVirtualProcessorRoot::Activate yöntemini kullanarak bir sanal işlemci kökünü etkinleştirme eylemi, bir donanım iş parçacığının abonelik düzeyini bir artırır. IVirtualProcessorRoot::D eactivate veya IExecutionResource::Remove yöntemleri, etkinleştirilmiş bir sanal işlemci kökünde çağrıldığında abonelik düzeyini bir kez azaltmayı kaldırır.
Resource Manager, kaynakların zamanlayıcılar arasında ne zaman taşındığını belirleme yollarından biri olarak abonelik düzeyi bilgilerini kullanır.
IExecutionResource::GetExecutionResourceId Yöntemi
Bu yürütme kaynağının temsil ettiği donanım iş parçacığı için benzersiz bir tanımlayıcı döndürür.
virtual unsigned int GetExecutionResourceId() const = 0;
Dönüş Değeri
Bu yürütme kaynağını temel alan donanım iş parçacığı için benzersiz bir tanımlayıcı.
Açıklamalar
Her donanım iş parçacığına Eşzamanlılık Çalışma Zamanı tarafından benzersiz bir tanımlayıcı atanır. Birden çok yürütme kaynağı ilişkili donanım iş parçacığıysa, hepsinin yürütme kaynağı tanımlayıcısı aynı olur.
IExecutionResource::GetNodeId Yöntemi
Bu yürütme kaynağının ait olduğu işlemci düğümü için benzersiz bir tanımlayıcı döndürür.
virtual unsigned int GetNodeId() const = 0;
Dönüş Değeri
İşlemci düğümü için benzersiz tanımlayıcı.
Açıklamalar
Eşzamanlılık Çalışma Zamanı, sistemdeki donanım iş parçacıklarını işlemci düğümleri grupları halinde temsil eder. Düğümler genellikle sistemin donanım topolojisinden türetilir. Örneğin, belirli bir yuvadaki veya belirli bir NUMA düğümündeki tüm işlemciler aynı işlemci düğümüne ait olabilir. Resource Manager, ile başlayan 0
ve dahil olan nodeCount - 1
bu düğümlere benzersiz tanımlayıcılar atar; burada nodeCount
sistemdeki toplam işlemci düğümü sayısını temsil eder.
Düğüm sayısı GetProcessorNodeCount işlevinden alınabilir.
IExecutionResource::Remove Yöntemi
Bu yürütme kaynağını Resource Manager'a döndürür.
virtual void Remove(_Inout_ IScheduler* pScheduler) = 0;
Parametreler
pScheduler
Bu yürütme kaynağını kaldırma isteğinde bulunan zamanlayıcı arabirimi.
Açıklamalar
Tek başına yürütme kaynaklarının yanı sıra sanal işlemci kökleriyle ilişkili yürütme kaynaklarını Resource Manager'a döndürmek için bu yöntemi kullanın.
Bu, ISchedulerProxy::SubscribeCurrentThread veya ISchedulerProxy::RequestInitialVirtualProcessors yöntemlerinden birinden aldığınız tek başına bir yürütme kaynağıysa, yöntemi Remove
çağırmak kaynağın temsil etmek için oluşturulduğu iş parçacığı aboneliğini sona erdirir. Zamanlayıcı ara sunucusunu kapatmadan önce tüm iş parçacığı aboneliklerini sonlandırmanız ve aboneliği oluşturan iş parçacığından aramanız Remove
gerekir.
Arabirim arabirimden devraldığından sanal işlemci kökleri de yöntemi çağrılarak Remove
Resource Manager'a IVirtualProcessorRoot
IExecutionResource
döndürülebilir. IScheduler::RemoveVirtualProcessors yöntemine yapılan bir çağrıya yanıt olarak veya ISchedulerProxy::CreateOversubscriber yönteminden aldığınız fazla abonelikli bir sanal işlemci köküyle işiniz bittiğinde bir sanal işlemci kökü döndürmeniz gerekebilir. Sanal işlemci kökleri için, iş parçacığının Remove
yöntemini çağırabileceği hiçbir kısıtlama yoktur.
invalid_argument
parametresi pScheduler
olarak ayarlanırsa NULL
oluşturulur.
invalid_operation
parametresi pScheduler
, bu yürütme kaynağının oluşturulduğu zamanlayıcıdan farklıysa veya geçerli iş parçacığı iş parçacığı aboneliğini oluşturan iş parçacığından farklıysa tek başına yürütme kaynağıyla oluşturulur.