IExecutionResource (Estructura)
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 subproceso es una manera de informar a Resource Manager de que un subproceso determinado participará en el trabajo en cola de un programador, junto con las raíces del procesador virtual que Resource Manager asigna al programador. 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. Solo se incluyen los subprocesos que Resource Manager conoce en forma de subprocesos suscritos y raíces de procesador virtual que ejecutan activamente servidores proxy 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 el nivel de suscripción del subproceso de hardware en uno.
El acto de activar una raíz de procesador virtual mediante el método IVirtualProcessorRoot::Activate incrementa el nivel de suscripción de un subproceso de hardware en uno. Los métodos IVirtualProcessorRoot::D eactivate o IExecutionResource::Remove reducen el nivel de suscripción en uno cuando se invocan en una raíz de procesador virtual activada.
Resource Manager usa información de nivel de suscripción como una de las formas en las que se determina cuándo mover recursos entre programadores.
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 Runtime de simultaneidad asigna un identificador único a cada subproceso de hardware. 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 Runtime de simultaneidad representa subprocesos de hardware en el sistema en grupos de nodos de procesador. 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 subproceso antes de cerrar un proxy de programador y debe llamar Remove
desde el subproceso 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 produce si el parámetro pScheduler
se establece en NULL
.
invalid_operation
se produce 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 subproceso actual es diferente del subproceso que creó la suscripción de subproceso.
Consulte también
concurrency (espacio de nombres)
IVirtualProcessorRoot (estructura)