Compartir a través de


Estructura ISchedulerProxy

La interfaz por la que los planificadores se comunican con el Resource Manager del Concurrency Runtime para negociar sobre la asignación de recursos.

Sintaxis

struct ISchedulerProxy;

Miembros

Métodos públicos

Nombre Descripción
ISchedulerProxy::BindContext Asocia un contexto de ejecución con un proxy de subproceso, si no está asociado ya 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 Administrador de Recursos que el planificador 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 Desvincula 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 proxies de subprocesos. 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 este aún no tiene uno asociado.

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

Parámetros

pContext
Una interfaz para el 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 planificación de UMS, dado que no puede llamar a métodos que asignen memoria, y la vinculación de un proxy de hilo puede implicar asignación de memoria si un proxy de hilo no está fácilmente disponible en el grupo libre de la fábrica de proxies de hilos.

invalid_argument se lanza si el parámetro pContext es igual a 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 que desea sobresuscribir.

Valor devuelto

Interfaz IVirtualProcessorRoot.

Comentarios

Utilice este método cuando el planificador quiera sobresuscribir un hilo de ejecución de hardware específico 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 sobresuscribir una raíz de procesador virtual ya existente, ya que la interfaz IVirtualProcessorRoot hereda de la interfaz IExecutionResource.

El método 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.

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 políticas del planificador para determinar la asignación inicial de un planificador, 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 un callback en el programador antes de que este método se devuelva.

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 Administrador de Recursos 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 suscribir un hilo aumenta el nivel de suscripción del hilo 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.

Método ISchedulerProxy::Shutdown

Notifica al Administrador de Recursos que el planificador 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 planificador recibió como resultado de suscribir un hilo externo mediante los métodos ISchedulerProxy::RequestInitialVirtualProcessors o ISchedulerProxy::SubscribeCurrentThread deben devolverse al Gestor de Recursos mediante IExecutionResource::Remove antes de que el planificador se cierre.

Si el programador tenía raíces de procesador virtual desactivadas, debe activarlas mediante IVirtualProcessorRoot::Activate y hacer que los proxies de hilos que se ejecutan en ellas abandonen el método Dispatch de los contextos de ejecución que están despachando 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 el tiempo de ejecución.

Comentarios

Utilice este método si desea que el Administrador de Recursos tenga en cuenta el hilo actual mientras asigna recursos a su programador y a otros programadores. Resulta especialmente útil cuando el subproceso planea participar en el trabajo en cola en el programador, junto con los orígenes de procesadores virtuales 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 suscribirse a un hilo aumenta el nivel de suscripción del hilo 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

Desvincula 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 proxies de subprocesos. 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 debe desasociarse de su proxy de hilo.

Consulte también

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