IExecutionResource 結構
硬體執行緒的抽象概念。
語法
struct IExecutionResource;
成員
公用方法
名稱 | 描述 |
---|---|
IExecutionResource::CurrentSubscriptionLevel | 傳回此執行資源目前與基礎硬體線程相關聯的已啟動虛擬處理器根和已訂閱的外部線程數目。 |
IExecutionResource::GetExecutionResourceId | 傳回此執行資源所代表之硬體線程的唯一標識符。 |
IExecutionResource::GetNodeId | 傳回這個執行資源所屬之處理器節點的唯一標識符。 |
IExecutionResource::Remove | 將這個執行資源傳回 Resource Manager。 |
備註
執行資源可以是獨立或與虛擬處理器根目錄相關聯的。 當您應用程式中的線程建立線程訂用帳戶時,就會建立獨立執行資源。 ISchedulerProxy::SubscribeThread 和 ISchedulerProxy::RequestInitialVirtualProcessors 方法會建立線程訂閱,並傳回IExecutionResource
代表訂用帳戶的介面。 建立線程訂用帳戶是通知 Resource Manager,指定線程將參與排入排程器的工作佇列,以及虛擬處理器根資源管理員指派給排程器的方法。 Resource Manager 會使用資訊來避免過度訂閱硬體線程。
繼承階層架構
IExecutionResource
需求
標頭: concrtrm.h
命名空間: concurrency
IExecutionResource::CurrentSubscriptionLevel 方法
傳回此執行資源目前與基礎硬體線程相關聯的已啟動虛擬處理器根和已訂閱的外部線程數目。
virtual unsigned int CurrentSubscriptionLevel() const = 0;
傳回值
目前的訂用帳戶層級。
備註
訂用帳戶層級會告訴您有多少個執行中的線程與硬體線程相關聯。 這隻包含 Resource Manager 以已訂閱線程的形式感知的線程,以及正在主動執行線程 Proxy 的虛擬處理器根目錄。
呼叫 ISchedulerProxy::SubscribeCurrentThread 方法,或方法 ISchedulerProxy::RequestInitialVirtualProcessors,並將 參數doSubscribeCurrentThread
設定為值true
,將硬體線程的訂用帳戶層級遞增一個。 它們也會傳回 IExecutionResource
代表訂用帳戶的介面。 IExecutionResource::Remove 的對應呼叫會將硬體線程的訂用帳戶層級遞減一。
使用 IVirtualProcessorRoot::Activate 方法啟動虛擬處理器根目錄的動作,會將硬體線程的訂用帳戶層級遞增一個。 IVirtualProcessorRoot::D eactivate 方法,或 IExecutionResource::Remove 會在啟動的虛擬處理器根目錄上叫用時,將訂用帳戶層級遞減一。
Resource Manager 會使用訂用帳戶層級資訊作為判斷排程器之間何時移動資源的方式之一。
IExecutionResource::GetExecutionResourceId 方法
傳回此執行資源所代表之硬體線程的唯一標識符。
virtual unsigned int GetExecutionResourceId() const = 0;
傳回值
此執行資源基礎之硬體線程的唯一標識碼。
備註
每個硬體線程都會由並行運行時間指派唯一標識符。 如果多個執行資源是相關聯的硬體線程,它們都會有相同的執行資源標識符。
IExecutionResource::GetNodeId 方法
傳回這個執行資源所屬之處理器節點的唯一標識符。
virtual unsigned int GetNodeId() const = 0;
傳回值
處理器節點的唯一標識碼。
備註
並行運行時間代表系統上的硬體線程,以處理器節點群組表示。 節點通常衍生自系統的硬體拓撲。 例如,特定套接字或特定NUMA節點上的所有處理器都可能屬於相同的處理器節點。 Resource Manager 會將唯一標識符指派給這些節點,其開頭 0
為 ,包括 nodeCount - 1
,其中 nodeCount
代表系統上的處理器節點總數。
您可以從 GetProcessorNodeCount 函式取得節點計數。
IExecutionResource::Remove 方法
將這個執行資源傳回 Resource Manager。
virtual void Remove(_Inout_ IScheduler* pScheduler) = 0;
參數
pScheduler
排程器的介面,提出移除此執行資源的要求。
備註
使用此方法可傳回獨立執行資源,以及與虛擬處理器根目錄相關聯的執行資源給 Resource Manager。
如果這是您從其中一種方法 ISchedulerProxy::SubscribeCurrentThread 或 ISchedulerProxy::RequestInitialVirtualProcessors 收到的獨立執行資源,則呼叫 方法Remove
將會結束建立資源所代表的線程訂用帳戶。 您必須在關閉排程器 Proxy 之前結束所有線程訂閱,而且必須從建立訂閱的線程呼叫 Remove
。
虛擬處理器根同樣可以透過叫用 Remove
方法傳回至資源管理員,因為介面 IVirtualProcessorRoot
繼承自 IExecutionResource
介面。 您可能需要傳回虛擬處理器根目錄,以回應 IScheduler::RemoveVirtualProcessors 方法的呼叫,或當您使用從 ISchedulerProxy::CreateOversubscriber 方法取得的過度訂閱虛擬處理器根目錄時。 對於虛擬處理器根目錄,沒有任何限制線程可以叫 Remove
用 方法。
invalid_argument
如果 參數 pScheduler
設定為 NULL
,則會擲回 。
invalid_operation
如果 參數 pScheduler
與為此執行資源建立的排程器不同,或者,如果目前的線程與建立線程訂用帳戶的線程不同,則會擲回 。