Структура IExecutionResource

Абстракция для аппаратного потока.

Синтаксис

struct IExecutionResource;

Участники

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

Имя Описание
IExecutionResource::CurrentSubscriptionLevel Возвращает количество активированных корней виртуального процессора и подписанных внешних потоков, которые в настоящее время связаны с базовым потоком оборудования, который представляет этот ресурс выполнения.
IExecutionResource::GetExecutionResourceId Возвращает уникальный идентификатор для аппаратного потока, который представляет этот ресурс выполнения.
IExecutionResource::GetNodeId Возвращает уникальный идентификатор узла процессора, к которому принадлежит этот ресурс выполнения.
IExecutionResource::Remove Возвращает этот ресурс выполнения в Resource Manager.

Замечания

Ресурсы выполнения могут быть автономными или связанными с корнем виртуального процессора. Автономный ресурс выполнения создается, когда поток в приложении создает подписку на поток. Методы ISchedulerProxy::SubscriptionThread и ISchedulerProxy::RequestInitialVirtualProcessors создают подписки потоков и возвращают IExecutionResource интерфейс, представляющий подписку. Создание подписки на поток — это способ сообщить Resource Manager о том, что данный поток будет участвовать в рабочей очереди планировщика, а также корневого процессора Resource Manager назначает планировщику. Resource Manager использует сведения, чтобы избежать чрезмерной синхронизации аппаратных потоков, где он может.

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

IExecutionResource

Требования

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

Пространство имен: concurrency

Метод IExecutionResource::CurrentSubscriptionLevel

Возвращает количество активированных корней виртуального процессора и подписанных внешних потоков, которые в настоящее время связаны с базовым потоком оборудования, который представляет этот ресурс выполнения.

virtual unsigned int CurrentSubscriptionLevel() const = 0;

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

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

Замечания

Уровень подписки указывает, сколько запущенных потоков связано с аппаратным потоком. Это включает только потоки, о которых известно Resource Manager в виде подписанных потоков, и корневых корней виртуальных процессоров, которые активно выполняют прокси-серверы потоков.

Вызов метода ISchedulerProxy::SubscriptionCurrentThread или метод 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::SubscriptionCurrentThread или ISchedulerProxy::RequestInitialVirtualProcessors, вызов метода Remove завершит подписку потока, которую был создан ресурс для представления. Перед завершением работы прокси-сервера планировщика необходимо завершить все подписки потоков и вызвать Remove из потока, создавшего подписку.

Корни виртуального процессора также могут быть возвращены диспетчеру ресурсов путем вызова метода Remove, поскольку интерфейс IVirtualProcessorRoot наследуется от интерфейса IExecutionResource. Возможно, вам потребуется вернуть корневой каталог виртуального процессора в ответ на вызов метода IScheduler::RemoveVirtualProcessors или при завершении работы с корнем виртуального процессора, полученным из метода ISchedulerProxy::CreateOversubscriber . Для корней виртуального процессора нет ограничений, в которых поток может вызывать Remove метод.

invalid_argument вызывается, если для параметра pScheduler задано значение NULL.

invalid_operation Вызывается, если параметр pScheduler отличается от планировщика, для созданного ресурса выполнения или с автономным ресурсом выполнения, если текущий поток отличается от потока, создавшего подписку на поток.

См. также

Пространство имен concurrency
Структура IVirtualProcessorRoot