ISchedulerProxy (Estructura)

La interfaz por la que los programadores se comunican con el Administrador de recursos del runtime de simultaneidad para negociar la asignación de recursos.

Sintaxis

struct ISchedulerProxy;

Miembros

Métodos públicos

Nombre Descripción
ISchedulerProxy::BindContext Asocia un contexto de ejecución a un proxy de subproceso, si aún no está asociado con uno.
ISchedulerProxy::CreateOversubscriber Crea una nueva raíz del procesador virtual en el subproceso de hardware asociado con un recurso de ejecución existente.
ISchedulerProxy::RequestInitialVirtualProcessors Solicita una asignación inicial de raíces del procesador virtual. Cada raíz del procesador virtual representa la capacidad de ejecutar un subproceso que puede realizar trabajo para el programador.
ISchedulerProxy::Shutdown Notifica al Resource Manager que el programador se está apagando. Esto ocasionará que el Resource Manager recupere inmediatamente todos los recursos concedidos al programador.
ISchedulerProxy::SubscribeCurrentThread Registra el subproceso actual con el Resource Manager y lo asocia con este programador.
ISchedulerProxy::UnbindContext Desasocia un proxy de subproceso del contexto de ejecución especificado por el parámetro pContext y lo devuelve al grupo libre de la fábrica de proxy del subproceso. Solo se puede llamar a este método en un contexto de ejecución enlazado a través del método ISchedulerProxy::BindContext y que aún no se ha iniciado mediante el parámetro pContext de una llamada al método IThreadProxy::SwitchTo.

Comentarios

El Resource Manager entrega una interfaz ISchedulerProxy a cada programador que se registra con él mediante el método IResourceManager::RegisterScheduler.

Jerarquía de herencia

ISchedulerProxy

Requisitos

Encabezado: concrtrm.h

Espacio de nombres: simultaneidad

ISchedulerProxy::BindContext (Método)

Asocia un contexto de ejecución a un proxy de subproceso, si aún no está asociado con uno.

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

Parámetros

pContext
Una interfaz al contexto de ejecución que se va a asociar con un proxy de subproceso.

Comentarios

Normalmente, el método IThreadProxy::SwitchTo enlazará un proxy de subproceso con un contexto de ejecución a petición. Sin embargo, hay circunstancias en las que es necesario enlazar un contexto de antemano para asegurarse de que el método SwitchTo cambia a un contexto ya enlazado. Este es el caso en un contexto de programación de UMS, ya que no puede llamar a métodos que asignan memoria y el enlace de un proxy de subproceso puede implicar asignación de memoria si un proxy de subproceso no está disponible fácilmente en el grupo libre de la fábrica del proxy de subproceso.

invalid_argument se produce si el parámetro pContext tiene el valor NULL.

ISchedulerProxy::CreateOversubscriber (Método)

Crea una nueva raíz del procesador virtual en el subproceso de hardware asociado con un recurso de ejecución existente.

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

Parámetros

pExecutionResource
Una interfaz IExecutionResource que representa el subproceso de hardware para el que desea generar una suscripción excesiva.

Valor devuelto

Interfaz IVirtualProcessorRoot.

Comentarios

Use este método cuando el programador quiera generar una suscripción excesiva para un subproceso de hardware determinado durante un período de tiempo limitado. Una vez que haya terminado con la raíz del procesador virtual, debe devolverla al administrador de recursos mediante una llamada al método Remove en la interfaz IVirtualProcessorRoot.

Incluso puede generar una suscripción excesiva para una raíz de procesador virtual existente, ya que la interfaz IVirtualProcessorRoot hereda de la interfaz IExecutionResource.

ISchedulerProxy::RequestInitialVirtualProcessors (Método)

Solicita una asignación inicial de raíces del procesador virtual. Cada raíz del procesador virtual representa la capacidad de ejecutar un subproceso que puede realizar trabajo para el programador.

virtual IExecutionResource* RequestInitialVirtualProcessors(bool doSubscribeCurrentThread) = 0;

Parámetros

doSubscribeCurrentThread
Suscribir o no el subproceso actual y tenerlo en cuenta durante la asignación de recursos.

Valor devuelto

La interfaz IExecutionResource del subproceso actual, si el parámetro doSubscribeCurrentThread tiene el valor true. Si el valor es false, el método devuelve NULL.

Comentarios

Antes de que un programador ejecute cualquier trabajo, debe usar este método para solicitar raíces del procesador virtual desde el Resource Manager. El Resource Manager accederá a la directiva del programador mediante IScheduler::GetPolicy y usará los valores de las claves MinConcurrency, MaxConcurrency y TargetOversubscriptionFactor de directiva para determinar cuántos subprocesos de hardware se asignarán inicialmente al programador y cuántas raíces del procesador virtual se crearán para cada subproceso de hardware. Para obtener más información sobre cómo se usan las directivas de programador para determinar la asignación inicial de un programador, consulte PolicyElementKey.

El Resource Manager concede recursos a un programador llamando al método IScheduler::AddVirtualProcessors con una lista de raíces del procesador virtual. El método se invoca como una devolución de llamada en el programador antes de que este método devuelva un resultado.

Si el programador solicitó la suscripción para el subproceso actual estableciendo el parámetro doSubscribeCurrentThread en true, el método devuelve una interfaz IExecutionResource. La suscripción debe finalizarse en un momento posterior mediante el método IExecutionResource::Remove.

Al determinar qué subprocesos de hardware se seleccionan, el Resource Manager intentará optimizar por afinidad de nodo del procesador. Si se solicita la suscripción para el subproceso actual, es una indicación de que el subproceso actual pretende participar en el trabajo asignado a este programador. En tal caso, las raíces de los procesadores virtuales asignados se encuentran en el nodo del procesador en el que se ejecuta el subproceso actual, si es posible.

El acto de suscribir un subproceso aumenta el nivel de suscripción del subproceso de hardware subyacente en uno. El nivel de suscripción se reduce en uno cuando finaliza la suscripción. Para más información sobre los niveles de suscripción, consulte IExecutionResource::CurrentSubscriptionLevel.

ISchedulerProxy::Shutdown (Método)

Notifica al Resource Manager que el programador se está apagando. Esto ocasionará que el Resource Manager recupere inmediatamente todos los recursos concedidos al programador.

virtual void Shutdown() = 0;

Comentarios

Todas las interfaces IExecutionContext que el programador recibió como resultado de suscribir un subproceso externo mediante los métodos ISchedulerProxy::RequestInitialVirtualProcessors o ISchedulerProxy::SubscribeCurrentThread deben devolverse al Resource Manager mediante IExecutionResource::Remove antes de que un programador se apague.

Si el programador tenía raíces de procesador virtual desactivadas, debe activarlas mediante IVirtualProcessorRoot::Activate y hacer que los proxies de subprocesos que se ejecuten en ellos dejen el método Dispatch de los contextos de ejecución que se envían antes de invocar Shutdown en un proxy del programador.

No es necesario que el programador devuelva individualmente todas las raíces del procesador virtual que el Resource Manager le concedió a través de llamadas al método Remove porque todas las raíces de los procesadores virtuales se devolverán al Resource Manager durante el apagado.

ISchedulerProxy::SubscribeCurrentThread (Método)

Registra el subproceso actual con el Resource Manager y lo asocia con este programador.

virtual IExecutionResource* SubscribeCurrentThread() = 0;

Valor devuelto

La interfaz IExecutionResource que representa el subproceso actual en runtime.

Comentarios

Use este método si desea que el Resource Manager tenga en cuenta el subproceso actual mientras asigna recursos al programador y a otros programadores. Resulta especialmente útil cuando el subproceso planea participar en el trabajo en cola en el programador, junto con las raíces del procesador virtual que recibe el programador de Resource Manager. El Resource Manager usa información para evitar la suscripción excesiva innecesaria de subprocesos de hardware en el sistema.

El recurso de ejecución recibido a través de este método debe devolverse al Resource Manager mediante el método IExecutionResource::Remove. El subproceso que llama al método Remove debe ser el mismo subproceso que anteriormente llamó al método SubscribeCurrentThread.

El acto de suscribir un subproceso aumenta el nivel de suscripción del subproceso de hardware subyacente en uno. El nivel de suscripción se reduce en uno cuando finaliza la suscripción. Para más información sobre los niveles de suscripción, consulte IExecutionResource::CurrentSubscriptionLevel.

ISchedulerProxy::UnbindContext (Método)

Desasocia un proxy de subproceso del contexto de ejecución especificado por el parámetro pContext y lo devuelve al grupo libre de la fábrica de proxy del subproceso. Solo se puede llamar a este método en un contexto de ejecución enlazado a través del método ISchedulerProxy::BindContext y que aún no se ha iniciado mediante el parámetro pContext de una llamada al método IThreadProxy::SwitchTo.

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

Parámetros

pContext
El contexto de ejecución que se va a desasociar de su proxy de subproceso.

Consulte también

concurrency (espacio de nombres)
IScheduler (estructura)
IThreadProxy (estructura)
IVirtualProcessorRoot (estructura)
IResourceManager (estructura)