Структура ISchedulerProxyISchedulerProxy Structure

Интерфейс, по которому планировщики взаимодействуют с диспетчером ресурсов среды выполнения с параллелизмом для согласования выделения ресурсов.The interface by which schedulers communicate with the Concurrency Runtime's Resource Manager to negotiate resource allocation.

СинтаксисSyntax

struct ISchedulerProxy;

ЧленыMembers

Открытые методыPublic Methods

nameName ОписаниеDescription
ISchedulerProxy:: БиндконтекстISchedulerProxy::BindContext Связывает контекст выполнения с прокси-сервером потока, если он еще не связан с одним потоком.Associates an execution context with a thread proxy, if it is not already associated with one.
ISchedulerProxy:: КреатеоверсубскриберISchedulerProxy::CreateOversubscriber Создает новый корень виртуального процессора в аппаратном потоке, связанном с существующим ресурсом выполнения.Creates a new virtual processor root on the hardware thread associated with an existing execution resource.
ISchedulerProxy:: РекуестинитиалвиртуалпроцессорсISchedulerProxy::RequestInitialVirtualProcessors Запрашивает начальное выделение корней виртуального процессора.Requests an initial allocation of virtual processor roots. Каждый корень виртуального процессора представляет возможность выполнения одного потока, который может выполнять работу с планировщиком.Every virtual processor root represents the ability to execute one thread that can perform work for the scheduler.
ISchedulerProxy:: ShutdownISchedulerProxy::Shutdown Уведомляет диспетчер ресурсов о завершении работы планировщика.Notifies the Resource Manager that the scheduler is shutting down. Это приведет к тому, что диспетчер ресурсов немедленно освободит все ресурсы, предоставленные планировщику.This will cause the Resource Manager to immediately reclaim all resources granted to the scheduler.
ISchedulerProxy:: СубскрибекуррентсреадISchedulerProxy::SubscribeCurrentThread Регистрирует текущий поток с диспетчер ресурсов, связывая его с этим планировщиком.Registers the current thread with the Resource Manager, associating it with this scheduler.
ISchedulerProxy:: УнбиндконтекстISchedulerProxy::UnbindContext Отменяет связь прокси-сервера потока с контекстом выполнения, указанным в pContext параметре, и возвращает его в свободный пул фабрики прокси-сервера потока.Disassociates a thread proxy from the execution context specified by the pContext parameter and returns it to the thread proxy factory's free pool. Этот метод может быть вызван только для контекста выполнения, который был привязан через метод ISchedulerProxy:: биндконтекст и еще не был запущен с помощью pContext параметра вызова метода исреадпрокси:: свитчто .This method may only be called on an execution context which was bound via the ISchedulerProxy::BindContext method and has not yet been started via being the pContext parameter of an IThreadProxy::SwitchTo method call.

КомментарииRemarks

Диспетчер ресурсов передает ISchedulerProxy интерфейс каждому планировщику, который регистрируется с ним с помощью метода метод IResourceManager:: регистерсчедулер .The Resource Manager hands an ISchedulerProxy interface to every scheduler that registers with it using the IResourceManager::RegisterScheduler method.

Иерархия наследованияInheritance Hierarchy

ISchedulerProxy

ТребованияRequirements

Заголовок: concrtrm. hHeader: concrtrm.h

Пространство имен: параллелизмNamespace: concurrency

Метод ISchedulerProxy:: БиндконтекстISchedulerProxy::BindContext Method

Связывает контекст выполнения с прокси-сервером потока, если он еще не связан с одним потоком.Associates an execution context with a thread proxy, if it is not already associated with one.

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

ПараметрыParameters

pContextpContext
Интерфейс к контексту выполнения, связываемый с прокси-потоком.An interface to the execution context to associate with a thread proxy.

КомментарииRemarks

Как правило, метод исреадпрокси:: свитчто будет привязывать прокси-сервер потока к контексту выполнения по запросу.Normally, the IThreadProxy::SwitchTo method will bind a thread proxy to an execution context on demand. Однако существуют обстоятельства, когда необходимо привязать контекст заранее, чтобы SwitchTo метод переключились на уже привязанный контекст.There are, however, circumstances where it is necessary to bind a context in advance to ensure that the SwitchTo method switches to an already bound context. Это происходит в контексте планирования UMS, так как он не может вызывать методы, выделяющие память, и привязка прокси-сервера потока может привести к выделению памяти, если прокси-сервер потока недоступен в свободном пуле фабрики прокси потока.This is the case on a UMS scheduling context as it cannot call methods that allocate memory, and binding a thread proxy may involve memory allocation if a thread proxy is not readily available in the free pool of the thread proxy factory.

invalid_argument Если параметр имеет значение, создается исключение pContext NULL .invalid_argument is thrown if the parameter pContext has the value NULL.

Метод ISchedulerProxy:: КреатеоверсубскриберISchedulerProxy::CreateOversubscriber Method

Создает новый корень виртуального процессора в аппаратном потоке, связанном с существующим ресурсом выполнения.Creates a new virtual processor root on the hardware thread associated with an existing execution resource.

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

ПараметрыParameters

пексекутионресаурцеpExecutionResource
IExecutionResourceИнтерфейс, представляющий аппаратный поток, который нужно переподписать.An IExecutionResource interface that represents the hardware thread you want to oversubscribe.

Возвращаемое значениеReturn Value

Интерфейс IVirtualProcessorRoot.An IVirtualProcessorRoot interface.

КомментарииRemarks

Используйте этот метод, если вашему планировщику требуется отменить подписывание определенного аппаратного потока в течение ограниченного периода времени.Use this method when your scheduler wants to oversubscribe a particular hardware thread for a limited amount of time. Завершив работу с корнем виртуального процессора, необходимо вернуть его в Resource Manager, вызвав метод Remove IVirtualProcessorRoot интерфейса.Once you are done with the virtual processor root, you should return it to the resource manager by calling the Remove method on the IVirtualProcessorRoot interface.

Поскольку интерфейс IVirtualProcessorRoot наследует от интерфейса IExecutionResource, можно даже переподписать существующий корневой виртуальный процессор.You can even oversubscribe an existing virtual processor root, because the IVirtualProcessorRoot interface inherits from the IExecutionResource interface.

Метод ISchedulerProxy:: РекуестинитиалвиртуалпроцессорсISchedulerProxy::RequestInitialVirtualProcessors Method

Запрашивает начальное выделение корней виртуального процессора.Requests an initial allocation of virtual processor roots. Каждый корень виртуального процессора представляет возможность выполнения одного потока, который может выполнять работу с планировщиком.Every virtual processor root represents the ability to execute one thread that can perform work for the scheduler.

virtual IExecutionResource* RequestInitialVirtualProcessors(bool doSubscribeCurrentThread) = 0;

ПараметрыParameters

досубскрибекуррентсреадdoSubscribeCurrentThread
Следует ли подписывать текущий поток и учетную запись для него во время выделения ресурсов.Whether to subscribe the current thread and account for it during resource allocation.

Возвращаемое значениеReturn Value

IExecutionResourceИнтерфейс для текущего потока, если параметр doSubscribeCurrentThread имеет значение true .The IExecutionResource interface for the current thread, if the parameter doSubscribeCurrentThread has the value true. Если значение равно false , метод возвращает значение null.If the value is false, the method returns NULL.

КомментарииRemarks

Прежде чем планировщик будет выполнять какую-либо работу, он должен использовать этот метод для запроса корней виртуального процессора из диспетчер ресурсов.Before a scheduler executes any work, it should use this method to request virtual processor roots from the Resource Manager. Диспетчер ресурсов будет получать доступ к политике планировщика с помощью IScheduler:: Policy и использовать значения ключей политики MinConcurrency , MaxConcurrency а также определить, сколько TargetOversubscriptionFactor аппаратных потоков необходимо назначить планировщику, и сколько корней виртуального процессора следует создать для каждого аппаратного потока.The Resource Manager will access the scheduler's policy using IScheduler::GetPolicy and use the values for the policy keys MinConcurrency, MaxConcurrency and TargetOversubscriptionFactor to determine how many hardware threads to assign to the scheduler initially and how many virtual processor roots to create for every hardware thread. Дополнительные сведения о том, как политики планировщика используются для определения первоначального выделения планировщика, см. в разделе полициелементкэй.For more information on how scheduler policies are used to determine a scheduler's initial allocation, see PolicyElementKey.

Диспетчер ресурсов предоставляет ресурсы планировщику путем вызова метода IScheduler:: аддвиртуалпроцессорс со списком корней виртуального процессора.The Resource Manager grants resources to a scheduler by calling the method IScheduler::AddVirtualProcessors with a list of virtual processor roots. Метод вызывается как обратный вызов планировщика перед возвратом из этого метода.The method is invoked as a callback into the scheduler before this method returns.

Если планировщик запросил подписку для текущего потока, задав для параметра значение doSubscribeCurrentThread true , метод возвращает IExecutionResource интерфейс.If the scheduler requested subscription for the current thread by setting the parameter doSubscribeCurrentThread to true, the method returns an IExecutionResource interface. Подписка должна быть завершена позже с помощью метода IExecutionResource:: Remove .The subscription must be terminated at a later point by using the IExecutionResource::Remove method.

При определении выбранных аппаратных потоков диспетчер ресурсов будет пытаться выполнить оптимизацию для сходства узлов процессора.When determining which hardware threads are selected, the Resource Manager will attempt to optimize for processor node affinity. Если для текущего потока запрашивается подписка, это означает, что текущий поток намеревается участвовать в работе, назначенной этому планировщику.If subscription is requested for the current thread, it is an indication that the current thread intends to participate in the work assigned to this scheduler. В этом случае корни выделенных виртуальных процессоров находятся на узле процессора, на котором выполняется текущий поток, если это возможно.In such a case, the allocated virtual processors roots are located on the processor node the current thread is executing on, if possible.

Процесс подписки потока увеличивает уровень подписки базового аппаратного потока на единицу.The act of subscribing a thread increases the subscription level of the underlying hardware thread by one. Уровень подписки уменьшается на единицу после завершения подписки.The subscription level is reduced by one when the subscription is terminated. Дополнительные сведения об уровнях подписки см. в разделе IExecutionResource:: куррентсубскриптионлевел.For more information on subscription levels, see IExecutionResource::CurrentSubscriptionLevel.

Метод ISchedulerProxy:: ShutdownISchedulerProxy::Shutdown Method

Уведомляет диспетчер ресурсов о завершении работы планировщика.Notifies the Resource Manager that the scheduler is shutting down. Это приведет к тому, что диспетчер ресурсов немедленно освободит все ресурсы, предоставленные планировщику.This will cause the Resource Manager to immediately reclaim all resources granted to the scheduler.

virtual void Shutdown() = 0;

КомментарииRemarks

Все IExecutionContext интерфейсы, полученные планировщиком в результате подписки внешнего потока с помощью методов ISchedulerProxy::RequestInitialVirtualProcessors или, ISchedulerProxy::SubscribeCurrentThread должны возвращаться в Диспетчер ресурсов с помощью IExecutionResource::Remove перед завершением работы планировщика.All IExecutionContext interfaces the scheduler received as a result of subscribing an external thread using the methods ISchedulerProxy::RequestInitialVirtualProcessors or ISchedulerProxy::SubscribeCurrentThread must be returned to the Resource Manager using IExecutionResource::Remove before a scheduler shuts itself down.

Если у вашего планировщика есть деактивированные корни виртуального процессора, необходимо активировать их с помощью ивиртуалпроцессоррут:: Activate, а прокси-серверы потоков, выполняющиеся на них, оставить Dispatch метод контекстов выполнения, который они отправляют перед вызовом Shutdown по прокси-серверу планировщика.If your scheduler had any deactivated virtual processor roots, you must activate them using IVirtualProcessorRoot::Activate, and have the thread proxies executing on them leave the Dispatch method of the execution contexts they are dispatching before you invoke Shutdown on a scheduler proxy.

Для планировщика необязательно возвращать все корневые виртуальные процессоры, выданные ему диспетчером ресурсов путем вызовов метода Remove, поскольку все корневые виртуальные процессоры будут возвращены диспетчеру ресурсов при завершении работы.It is not necessary for the scheduler to individually return all of the virtual processor roots the Resource Manager granted to it via calls to the Remove method because all virtual processors roots will be returned to the Resource Manager at shutdown.

Метод ISchedulerProxy:: СубскрибекуррентсреадISchedulerProxy::SubscribeCurrentThread Method

Регистрирует текущий поток с диспетчер ресурсов, связывая его с этим планировщиком.Registers the current thread with the Resource Manager, associating it with this scheduler.

virtual IExecutionResource* SubscribeCurrentThread() = 0;

Возвращаемое значениеReturn Value

IExecutionResourceВзаимодействие, представляющее текущий поток в среде выполнения.The IExecutionResource interfacing representing the current thread in the runtime.

КомментарииRemarks

Используйте этот метод, если необходимо, чтобы диспетчер ресурсов учетной записи для текущего потока при выделении ресурсов планировщику и другим планировщикам.Use this method if you want the Resource Manager to account for the current thread while allocating resources to your scheduler and other schedulers. Это особенно полезно, когда поток планирует участвовать в работе в очереди планировщика, а также к корням виртуальных процессоров, получаемым планировщиком от диспетчер ресурсов.It is especially useful when the thread plans to participate in the work queued to your scheduler, along with the virtual processor roots the scheduler receives from the Resource Manager. Диспетчер ресурсов использует сведения, чтобы предотвратить ненужную избыточную подписку аппаратных потоков в системе.The Resource Manager uses information to prevent unnecessary oversubscription of hardware threads on the system.

Ресурс выполнения, полученный с помощью этого метода, должен возвращаться в диспетчер ресурсов с помощью метода IExecutionResource:: Remove .The execution resource received via this method should be returned to the Resource Manager using the IExecutionResource::Remove method. Поток, вызывающий Remove метод, должен быть тем же потоком, который ранее вызвал SubscribeCurrentThread метод.The thread that calls the Remove method must be the same thread that previously called the SubscribeCurrentThread method.

Процесс подписки потока увеличивает уровень подписки базового аппаратного потока на единицу.The act of subscribing a thread increases the subscription level of the underlying hardware thread by one. Уровень подписки уменьшается на единицу после завершения подписки.The subscription level is reduced by one when the subscription is terminated. Дополнительные сведения об уровнях подписки см. в разделе IExecutionResource:: куррентсубскриптионлевел.For more information on subscription levels, see IExecutionResource::CurrentSubscriptionLevel.

Метод ISchedulerProxy:: УнбиндконтекстISchedulerProxy::UnbindContext Method

Отменяет связь прокси-сервера потока с контекстом выполнения, указанным в pContext параметре, и возвращает его в свободный пул фабрики прокси-сервера потока.Disassociates a thread proxy from the execution context specified by the pContext parameter and returns it to the thread proxy factory's free pool. Этот метод может быть вызван только для контекста выполнения, который был привязан через метод ISchedulerProxy:: биндконтекст и еще не был запущен с помощью pContext параметра вызова метода исреадпрокси:: свитчто .This method may only be called on an execution context which was bound via the ISchedulerProxy::BindContext method and has not yet been started via being the pContext parameter of an IThreadProxy::SwitchTo method call.

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

ПараметрыParameters

pContextpContext
Контекст выполнения для отсвязи от прокси-сервера потока.The execution context to disassociate from its thread proxy.

См. также разделSee also

Пространство имен Concurrencyconcurrency Namespace
Структура ISchedulerIScheduler Structure
Структура IThreadProxyIThreadProxy Structure
Структура IVirtualProcessorRootIVirtualProcessorRoot Structure
Структура IResourceManagerIResourceManager Structure