Структура IExecutionResourceIExecutionResource Structure

Абстракция для аппаратного потока.An abstraction for a hardware thread.

СинтаксисSyntax

struct IExecutionResource;

ЧленыMembers

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

nameName ОписаниеDescription
IExecutionResource:: КуррентсубскриптионлевелIExecutionResource::CurrentSubscriptionLevel Возвращает число активированных корней виртуальных процессоров и подписанных внешних потоков, которые в настоящее время связаны с базовым аппаратным потоком, который представляет этот ресурс выполнения.Returns the number of activated virtual processor roots and subscribed external threads currently associated with the underlying hardware thread this execution resource represents.
IExecutionResource:: ЖетексекутионресаурцеидIExecutionResource::GetExecutionResourceId Возвращает уникальный идентификатор аппаратного потока, представляемого этим ресурсом выполнения.Returns a unique identifier for the hardware thread that this execution resource represents.
IExecutionResource:: GetNodeIdIExecutionResource::GetNodeId Возвращает уникальный идентификатор для узла процессора, к которому принадлежит этот ресурс выполнения.Returns a unique identifier for the processor node that this execution resource belongs to.
IExecutionResource:: RemoveIExecutionResource::Remove Возвращает этот ресурс выполнения в диспетчер ресурсов.Returns this execution resource to the Resource Manager.

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

Ресурсы выполнения могут быть автономными или связанными с корнями виртуальных процессоров.Execution resources can be standalone or associated with virtual processor roots. Автономный ресурс выполнения создается, когда поток в приложении создает подписку потока.A standalone execution resource is created when a thread in your application creates a thread subscription. Методы ISchedulerProxy:: субскрибесреад и ISchedulerProxy:: рекуестинитиалвиртуалпроцессорс создают подписки потоков и возвращают интерфейс, IExecutionResource представляющий подписку.The methods ISchedulerProxy::SubscribeThread and ISchedulerProxy::RequestInitialVirtualProcessors create thread subscriptions, and return an IExecutionResource interface representing the subscription. Создание подписки на поток — это способ информирования диспетчер ресурсов о том, что данный поток будет участвовать в очереди работ, поставленной в очередь планировщика, вместе с корнями виртуального процессора, диспетчер ресурсов назначены планировщику.Creating a thread subscription is a way to inform the Resource Manager that a given thread will participate in the work queued to a scheduler, along with the virtual processor roots Resource Manager assigns to the scheduler. Диспетчер ресурсов использует эти сведения, чтобы избежать переподписки аппаратных потоков, где это возможно.The Resource Manager uses the information to avoid oversubscribing hardware threads where it can.

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

IExecutionResource

ТребованияRequirements

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

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

Метод IExecutionResource:: КуррентсубскриптионлевелIExecutionResource::CurrentSubscriptionLevel Method

Возвращает число активированных корней виртуальных процессоров и подписанных внешних потоков, которые в настоящее время связаны с базовым аппаратным потоком, который представляет этот ресурс выполнения.Returns the number of activated virtual processor roots and subscribed external threads currently associated with the underlying hardware thread this execution resource represents.

virtual unsigned int CurrentSubscriptionLevel() const = 0;

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

Текущий уровень подписки.The current subscription level.

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

Уровень подписки сообщает, сколько работающих потоков связано с аппаратным потоком.The subscription level tells you how many running threads are associated with the hardware thread. Сюда относятся только потоки, на которые диспетчер ресурсов осведомлены в виде подписанных потоков, а также корни виртуального процессора, которые активно выполняют прокси-серверы потоков.This only includes threads the Resource Manager is aware of in the form of subscribed threads, and virtual processor roots that are actively executing thread proxies.

Вызов метода ISchedulerProxy:: субскрибекуррентсреадили метода ISchedulerProxy:: рекуестинитиалвиртуалпроцессорс с параметром, doSubscribeCurrentThread имеющим значение, true увеличивает уровень подписки аппаратного потока на единицу.Calling the method ISchedulerProxy::SubscribeCurrentThread, or the method ISchedulerProxy::RequestInitialVirtualProcessors with the parameter doSubscribeCurrentThread set to the value true increments the subscription level of a hardware thread by one. Они также возвращают IExecutionResource интерфейс, представляющий подписку.They also return an IExecutionResource interface representing the subscription. Соответствующий вызов метода IExecutionResource:: Remove уменьшает уровень подписки аппаратного потока на единицу.A corresponding call to the IExecutionResource::Remove decrements the hardware thread's subscription level by one.

Процесс активации корня виртуального процессора с помощью метода ивиртуалпроцессоррут:: Activate увеличивает уровень подписки аппаратного потока на единицу.The act of activating a virtual processor root using the method IVirtualProcessorRoot::Activate increments the subscription level of a hardware thread by one. Методы ивиртуалпроцессоррут::D еактиватеили IExecutionResource:: Remove уменьшают уровень подписки на один при вызове на активированном корне виртуального процессора.The methods IVirtualProcessorRoot::Deactivate, or IExecutionResource::Remove decrement the subscription level by one when invoked on an activated virtual processor root.

Диспетчер ресурсов использует сведения уровня подписки в качестве одного из способов определения момента перемещения ресурсов между планировщиками.The Resource Manager uses subscription level information as one of the ways in which to determine when to move resources between schedulers.

Метод IExecutionResource:: ЖетексекутионресаурцеидIExecutionResource::GetExecutionResourceId Method

Возвращает уникальный идентификатор аппаратного потока, представляемого этим ресурсом выполнения.Returns a unique identifier for the hardware thread that this execution resource represents.

virtual unsigned int GetExecutionResourceId() const = 0;

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

Уникальный идентификатор аппаратного потока, лежащего в основе этого ресурса выполнения.A unique identifier for the hardware thread underlying this execution resource.

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

Каждому аппаратному потоку назначается уникальный идентификатор среда выполнения с параллелизмом.Each hardware thread is assigned a unique identifier by the Concurrency Runtime. Если несколько ресурсов выполнения связаны с аппаратным потоком, все они будут иметь одинаковый идентификатор ресурса выполнения.If multiple execution resources are associated hardware thread, they will all have the same execution resource identifier.

Метод IExecutionResource:: GetNodeIdIExecutionResource::GetNodeId Method

Возвращает уникальный идентификатор для узла процессора, к которому принадлежит этот ресурс выполнения.Returns a unique identifier for the processor node that this execution resource belongs to.

virtual unsigned int GetNodeId() const = 0;

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

Уникальный идентификатор для узла процессора.A unique identifier for a processor node.

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

Среда выполнения с параллелизмом представляет аппаратные потоки в системе в группах узлов процессора.The Concurrency Runtime represents hardware threads on the system in groups of processor nodes. Узлы обычно являются производными от топологии оборудования системы.Nodes are usually derived from the hardware topology of the system. Например, все процессоры на определенном сокете или определенном узле NUMA могут принадлежать одному и тому же узлу процессора.For example, all processors on a specific socket or a specific NUMA node may belong to the same processor node. Диспетчер ресурсов назначает уникальные идентификаторы для этих узлов, начиная с 0 до и включая nodeCount - 1 , где nodeCount представляет общее количество процессорных узлов в системе.The Resource Manager assigns unique identifiers to these nodes starting with 0 up to and including nodeCount - 1, where nodeCount represents the total number of processor nodes on the system.

Количество узлов можно получить из функции жетпроцессорнодекаунт.The count of nodes can be obtained from the function GetProcessorNodeCount.

Метод IExecutionResource:: RemoveIExecutionResource::Remove Method

Возвращает этот ресурс выполнения в диспетчер ресурсов.Returns this execution resource to the Resource Manager.

virtual void Remove(_Inout_ IScheduler* pScheduler) = 0;

ПараметрыParameters

псчедулерpScheduler
Интерфейс планировщика, который делает запрос на удаление этого ресурса выполнения.An interface to the scheduler making the request to remove this execution resource.

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

Используйте этот метод для возврата ресурсов автономного выполнения, а также ресурсов выполнения, связанных с корнями виртуального процессора, в диспетчер ресурсов.Use this method to return standalone execution resources as well as execution resources associated with virtual processor roots to the Resource Manager.

Если это автономный ресурс выполнения, полученный из любого из методов ISchedulerProxy:: субскрибекуррентсреад или ISchedulerProxy:: рекуестинитиалвиртуалпроцессорс, вызов метода приведет к Remove завершению подписки потока, которую будет представлять ресурс.If this is a standalone execution resource you received from either of the methods ISchedulerProxy::SubscribeCurrentThread or ISchedulerProxy::RequestInitialVirtualProcessors, calling the method Remove will end the thread subscription that the resource was created to represent. Перед завершением работы прокси-сервера планировщика необходимо завершить все подписки потоков и вызвать Remove из потока, создавшего подписку.You are required to end all thread subscriptions before shutting down a scheduler proxy, and must call Remove from the thread that created the subscription.

Корни виртуального процессора также могут быть возвращены диспетчеру ресурсов путем вызова метода Remove, поскольку интерфейс IVirtualProcessorRoot наследуется от интерфейса IExecutionResource.Virtual processor roots, too, can be returned to the Resource Manager by invoking the Remove method, because the interface IVirtualProcessorRoot inherits from the IExecutionResource interface. Может потребоваться возврат корня виртуального процессора либо в ответ на вызов метода IScheduler:: ремовевиртуалпроцессорс , либо при завершении с помощью переподписанного корня виртуального процессора, полученного из метода ISchedulerProxy:: креатеоверсубскрибер .You may need to return a virtual processor root either in response to a call to the IScheduler::RemoveVirtualProcessors method, or when you are done with an oversubscribed virtual processor root you obtained from the ISchedulerProxy::CreateOversubscriber method. Для корней виртуального процессора нет ограничений на то, какой поток может вызвать Remove метод.For virtual processor roots, there are no restrictions on which thread can invoke the Remove method.

invalid_argument Если параметр имеет значение, возникает исключение pScheduler NULL .invalid_argument is thrown if the parameter pScheduler is set to NULL.

invalid_operation вызывается, если параметр pScheduler отличается от планировщика, для которого был создан этот ресурс выполнения, или, с автономным ресурсом выполнения, если текущий поток отличается от потока, создавшего подписку потока.invalid_operation is thrown if the parameter pScheduler is different from the scheduler that this execution resource was created for, or, with a standalone execution resource, if the current thread is different from the thread that created the thread subscription.

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

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