共用方式為


ISchedulerProxy 結構

排程器用來與並行執行階段的資源管理員通訊,以協調資源配置的介面。

語法

struct ISchedulerProxy;

成員

公用方法

名稱 描述
ISchedulerProxy::BindContext 如果執行內容尚未與線程 Proxy 產生關聯,則為它建立關聯。
ISchedulerProxy::CreateOversubscriber 在與現有執行資源相關聯的硬體線程上建立新的虛擬處理器根目錄。
ISchedulerProxy::RequestInitialVirtualProcessors 要求虛擬處理器根目錄的初始配置。 每個虛擬處理器根代表能夠執行一個線程來執行排程器的工作。
ISchedulerProxy::Shutdown 通知 Resource Manager 排程器正在關閉。 這會導致 Resource Manager 立即回收授與排程器的所有資源。
ISchedulerProxy::SubscribeCurrentThread 向 Resource Manager 註冊目前的線程,並將它與這個排程器產生關聯。
ISchedulerProxy::UnbindContext 將線程 Proxy 與 參數指定的 pContext 執行內容解除關聯,並將它傳回至線程 Proxy 處理站的免費集區。 這個方法只能在透過 ISchedulerProxy::BindContext 方法系結的執行內容上呼叫,而且尚未透過 IThreadProxypContext::SwitchTo 方法呼叫的參數啟動。

備註

Resource Manager 會將接給 ISchedulerProxy 使用 IResourceManager::RegisterScheduler 方法向它註冊的每個排程器

繼承階層架構

ISchedulerProxy

需求

標頭: concrtrm.h

命名空間: concurrency

ISchedulerProxy::BindContext 方法

如果執行內容尚未與線程 Proxy 產生關聯,則為它建立關聯。

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

參數

pContext
要與線程 Proxy 產生關聯的執行內容的介面。

備註

一般而言, IThreadProxy::SwitchTo 方法會視需要將線程 Proxy 系結至執行內容。 不過,在某些情況下,您必須事先系結內容,以確保 SwitchTo 方法切換至已系結的內容。 這是UMS排程內容的情況,因為它無法呼叫配置記憶體的方法,而且如果線程 Proxy 無法在線程 Proxy 處理站的免費集區中輕易取得,系結線程 Proxy 可能會牽涉到記憶體配置。

invalid_argument 如果 參數 pContext 具有 值 NULL,則會擲回 。

ISchedulerProxy::CreateOversubscriber 方法

在與現有執行資源相關聯的硬體線程上建立新的虛擬處理器根目錄。

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

參數

pExecutionResource
IExecutionResource介面,表示您想要過度訂閱的硬體線程。

傳回值

IVirtualProcessorRoot 介面。

備註

當您的排程器想要在有限的時間內過度訂閱特定硬體線程時,請使用此方法。 使用虛擬處理器根目錄完成之後,您應該在 介面上IVirtualProcessorRoot呼叫 Remove 方法,將其傳回給資源管理員。

因為 IVirtualProcessorRoot 介面繼承自 IExecutionResource 介面,所以您甚至可以過度訂閱現有的虛擬處理器根。

ISchedulerProxy::RequestInitialVirtualProcessors 方法

要求虛擬處理器根目錄的初始配置。 每個虛擬處理器根代表能夠執行一個線程來執行排程器的工作。

virtual IExecutionResource* RequestInitialVirtualProcessors(bool doSubscribeCurrentThread) = 0;

參數

doSubscribeCurrentThread
是否要訂閱目前的線程,並在資源配置期間加以考慮。

傳回值

IExecutionResource如果 參數doSubscribeCurrentThread具有 值true,則為目前線程的介面。 如果值為 false,則方法會傳回NULL。

備註

排程器執行任何工作之前,應該使用此方法向 Resource Manager 要求虛擬處理器根目錄。 Resource Manager 會使用 IScheduler::GetPolicy 存取排程器的原則,並使用原則索引鍵 MinConcurrency的值,並決定一開始要指派給排程器的硬體線程數目, MaxConcurrency 以及 TargetOversubscriptionFactor 每個硬體線程要建立多少個虛擬處理器根目錄。 如需排程器原則如何用來判斷排程器初始配置的詳細資訊,請參閱 PolicyElementKey

Resource Manager 會使用虛擬處理器根目錄清單呼叫 IScheduler::AddVirtualProcessors 方法,將資源授與排程器。 在此方法傳回之前,方法會叫用為排程器的回呼。

如果排程器藉由將 參數doSubscribeCurrentThreadtrue設定為 來要求目前線程的訂用帳戶,此方法會傳IExecutionResource回 介面。 訂閱必須在稍後 使用 IExecutionResource::Remove 方法終止。

判斷選取的硬體線程時,Resource Manager 會嘗試優化處理器節點親和性。 如果目前線程要求訂閱,表示目前線程想要參與指派給此排程器的工作。 在這種情況下,配置的虛擬處理器根目錄位於目前線程執行所在的處理器節點上,如果可能的話。

訂閱線程的動作會將基礎硬體線程的訂用帳戶層級增加一個。 當訂閱終止時,訂用帳戶層級會減少一個。 如需訂用帳戶層級的詳細資訊,請參閱 IExecutionResource::CurrentSubscriptionLevel

ISchedulerProxy::Shutdown 方法

通知 Resource Manager 排程器正在關閉。 這會導致 Resource Manager 立即回收授與排程器的所有資源。

virtual void Shutdown() = 0;

備註

排程器使用 方法ISchedulerProxy::RequestInitialVirtualProcessors訂閱外部線程而收到的所有IExecutionContext介面,或ISchedulerProxy::SubscribeCurrentThread必須在排程器關閉本身之前,使用 IExecutionResource::Remove 傳回給 Resource Manager。

如果您的排程器有任何已停用的虛擬處理器根目錄,您必須使用 IVirtualProcessorRoot::Activate 加以啟動,並在它們上執行線程 Proxy 時,保留Dispatch執行內容的方法,再Shutdown叫用排程器 Proxy。

排程器不需要透過呼叫 Remove 方法的方式,分別傳回資源管理員授與它的所有虛擬處理器根,因為所有虛擬處理器根都會在關閉時傳回資源管理員。

ISchedulerProxy::SubscribeCurrentThread 方法

向 Resource Manager 註冊目前的線程,並將它與這個排程器產生關聯。

virtual IExecutionResource* SubscribeCurrentThread() = 0;

傳回值

IExecutionResource表示運行時間中目前線程的介面。

備註

如果您想要 Resource Manager 考慮目前線程,同時將資源配置給排程器和其他排程器,請使用此方法。 當線程計劃參與排入排程器的工作,以及排程器從 Resource Manager 接收的虛擬處理器根目錄時,特別有用。 Resource Manager 會使用資訊來防止系統上不必要的硬體線程過度訂閱。

應使用 IExecutionResource::Remove 方法,將透過此方法收到的執行資源傳回給 Resource Manager。 呼叫 方法的 Remove 線程必須是先前呼叫 SubscribeCurrentThread 方法的相同線程。

訂閱線程的動作會將基礎硬體線程的訂用帳戶層級增加一個。 當訂閱終止時,訂用帳戶層級會減少一個。 如需訂用帳戶層級的詳細資訊,請參閱 IExecutionResource::CurrentSubscriptionLevel

ISchedulerProxy::UnbindContext 方法

將線程 Proxy 與 參數指定的 pContext 執行內容解除關聯,並將它傳回至線程 Proxy 處理站的免費集區。 這個方法只能在透過 ISchedulerProxy::BindContext 方法系結的執行內容上呼叫,而且尚未透過 IThreadProxypContext::SwitchTo 方法呼叫的參數啟動。

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

參數

pContext
要與其線程 Proxy 解除關聯的執行內容。

另請參閱

concurrency 命名空間
IScheduler 結構
IThreadProxy 結構
IVirtualProcessorRoot 結構
IResourceManager 結構