Compartir a través de


Estructura de IExecutionResource

Una abstracción para un subproceso del hardware.

Sintaxis

struct IExecutionResource;

Miembros

Métodos públicos

Nombre Descripción
IExecutionResource::CurrentSubscriptionLevel Devuelve el número de raíces de procesador virtual activadas y subprocesos externos suscritos asociados actualmente al subproceso de hardware subyacente que representa este recurso de ejecución.
IExecutionResource::GetExecutionResourceId Devuelve un identificador único para el subproceso de hardware que representa este recurso de ejecución.
IExecutionResource::GetNodeId Devuelve un identificador único para el nodo de procesador al que pertenece este recurso de ejecución.
IExecutionResource::Remove Devuelve este recurso de ejecución a Resource Manager.

Comentarios

Los recursos de ejecución pueden ser independientes o estar asociados a raíces del procesador virtual. Se crea un recurso de ejecución independiente cuando un subproceso de la aplicación crea una suscripción de subproceso. Los métodos ISchedulerProxy::SubscribeThread e ISchedulerProxy::RequestInitialVirtualProcessors crean suscripciones de subproceso y devuelven una interfaz IExecutionResource que representa la suscripción. Crear una suscripción de hilo es una manera de informar al Resource Manager de que un hilo determinado participará en el trabajo en cola de un planificador, junto con las raíces de procesador virtual que el Resource Manager asigna al planificador. Resource Manager usa la información para evitar sobrescribir subprocesos de hardware donde sea posible.

Jerarquía de herencia

IExecutionResource

Requisitos

Encabezado: concrtrm.h

Espacio de nombres: simultaneidad

IExecutionResource::CurrentSubscriptionLevel (Método)

Devuelve el número de raíces de procesador virtual activadas y subprocesos externos suscritos asociados actualmente al subproceso de hardware subyacente que representa este recurso de ejecución.

virtual unsigned int CurrentSubscriptionLevel() const = 0;

Valor devuelto

Nivel de suscripción actual.

Comentarios

El nivel de suscripción indica cuántos subprocesos en ejecución están asociados al subproceso de hardware. Se incluyen solo los subprocesos de los que el Administrador de Recursos tiene conocimiento en forma de subprocesos suscritos y las raíces de procesador virtual que ejecutan activamente proxies de subprocesos.

Llamar al método ISchedulerProxy::SubscribeCurrentThread o al método ISchedulerProxy::RequestInitialVirtualProcessors con el parámetro doSubscribeCurrentThread establecido en el valor true incrementa el nivel de suscripción de un subproceso de hardware en uno. También devuelven una interfaz IExecutionResource que representa la suscripción. Una llamada correspondiente a IExecutionResource::Remove disminuye en una unidad el nivel de suscripción del subproceso de hardware.

El acto de activar un procesador raíz virtual mediante el método IVirtualProcessorRoot::Activate incrementa en uno el nivel de suscripción de un subproceso de hardware. Los métodos IVirtualProcessorRoot::Deactivate o IExecutionResource::Remove reducen el nivel de suscripción en uno cuando se invocan en una raíz de procesador virtual activada.

Resource Manager utiliza información a nivel de suscripción como uno de los métodos para determinar cuándo mover recursos entre planificadores.

IExecutionResource::GetExecutionResourceId (Método)

Devuelve un identificador único para el subproceso de hardware que representa este recurso de ejecución.

virtual unsigned int GetExecutionResourceId() const = 0;

Valor devuelto

Identificador único del subproceso de hardware subyacente a este recurso de ejecución.

Comentarios

El Tiempo de ejecución de simultaneidad asigna a cada subproceso de hardware un identificador único. Si varios recursos de ejecución son subprocesos de hardware asociados, todos tendrán el mismo identificador de recurso de ejecución.

IExecutionResource::GetNodeId (Método)

Devuelve un identificador único para el nodo de procesador al que pertenece este recurso de ejecución.

virtual unsigned int GetNodeId() const = 0;

Valor devuelto

Identificador único de un nodo de procesador.

Comentarios

El tiempo de ejecución de concurrencia representa subprocesos de hardware en el sistema en grupos de nodos de procesadores. Normalmente, los nodos se derivan de la topología de hardware del sistema. Por ejemplo, todos los procesadores de un socket específico o un nodo NUMA específico pueden pertenecer al mismo nodo de procesador. Resource Manager asigna identificadores únicos a estos nodos que empiezan por 0 y hasta nodeCount - 1 (incluido), donde nodeCount representa el número total de nodos de procesador en el sistema.

El recuento de nodos se puede obtener de la función GetProcessorNodeCount.

IExecutionResource::Remove (Método)

Devuelve este recurso de ejecución a Resource Manager.

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

Parámetros

pScheduler
Interfaz para el programador que realiza la solicitud para quitar este recurso de ejecución.

Comentarios

Use este método para devolver recursos de ejecución independientes, así como recursos de ejecución asociados a raíces de procesador virtual a Resource Manager.

Si se trata de un recurso de ejecución independiente que recibió de cualquiera de los métodos ISchedulerProxy::SubscribeCurrentThread o ISchedulerProxy::RequestInitialVirtualProcessors, al llamar al método Remove finalizará la suscripción de subproceso que el recurso fue creado para representar. Debe finalizar todas las suscripciones de hilo antes de cerrar un proxy del planificador y debe llamar al Remove desde el hilo que creó la suscripción.

Las raíces del procesador virtual también se pueden devolver a Resource Manager invocando el método Remove, ya que la interfaz IVirtualProcessorRoot hereda de la interfaz IExecutionResource. Es posible que tenga que devolver una raíz del procesador virtual en respuesta a una llamada al método IScheduler::RemoveVirtualProcessors o cuando haya terminado con una raíz del procesador virtual con exceso de suscripciones que obtuvo del método ISchedulerProxy::CreateOversubscriber. En el caso de las raíces del procesador virtual, no hay restricciones en las que el subproceso puede invocar el método Remove.

invalid_argument se lanza si el parámetro pScheduler se establece en NULL.

invalid_operation se lanza si el parámetro pScheduler es diferente del programador para el que se creó este recurso de ejecución, o, con un recurso de ejecución independiente, si el hilo actual es diferente del hilo que creó la suscripción del hilo.

Consulte también

espacio de nombres de concurrencia
IVirtualProcessorRoot (estructura)