Share via


IScheduler (Estructura)

Una interfaz a una abstracción de un programador de trabajo. El Administrador de recursos del runtime de simultaneidad usa esta interfaz para comunicarse con programadores de trabajo.

Sintaxis

struct IScheduler;

Miembros

Métodos públicos

Nombre Descripción
IScheduler::AddVirtualProcessors Proporciona un programador con un conjunto de raíces del procesador virtual para usarse. Cada interfaz IVirtualProcessorRoot representa el derecho a ejecutar un único subproceso que puede desempeñar el trabajo en nombre del programador.
IScheduler::GetId Devuelve un identificador único para el programador.
IScheduler::GetPolicy Devuelve una copia de la directiva del programador. Para obtener más información sobre las directivas del programador, consulte SchedulerPolicy.
IScheduler::NotifyResourcesExternallyBusy Notifica a este programador que otros programadores emplean ahora los subprocesos de hardware que representa el conjunto de raíces del procesador virtual de la matriz ppVirtualProcessorRoots.
IScheduler::NotifyResourcesExternallyIdle Notifica a este programador que otros programadores no emplean los subprocesos de hardware que representa el conjunto de raíces del procesador virtual de la matriz ppVirtualProcessorRoots.
IScheduler::RemoveVirtualProcessors Inicia la eliminación de las raíces del procesador virtual asignadas anteriormente a este programador.
IScheduler::Statistics Proporciona información relacionada con las tasas de finalización y llegada de tareas y cambio de longitud de cola para un programador.

Comentarios

Si va a implementar un programador personalizado que se comunica con el Resource Manager, debería proporcionar una implementación de la interfaz IScheduler. La interfaz es un extremo de un canal bidireccional de comunicación entre un programador y el Resource Manager. El otro extremo se representa mediante las interfaces IResourceManager y ISchedulerProxy, que implementa el Resource Manager.

Jerarquía de herencia

IScheduler

Requisitos

Encabezado: concrtrm.h

Espacio de nombres: simultaneidad

IScheduler::AddVirtualProcessors (Método)

Proporciona un programador con un conjunto de raíces del procesador virtual para usarse. Cada interfaz IVirtualProcessorRoot representa el derecho a ejecutar un único subproceso que puede desempeñar el trabajo en nombre del programador.

virtual void AddVirtualProcessors(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

Parámetros

ppVirtualProcessorRoots
Matriz de interfaces IVirtualProcessorRoot en la que se representan las raíces del procesador virtual que se agregan al programador.

count
Número de interfaces de la matriz IVirtualProcessorRoot.

Comentarios

El Resource Manager invoca el método AddVirtualProcessor para conceder un conjunto inicial de raíces del procesador virtual a un programador. También podría invocar el método para agregar raíces del procesador virtual al programador cuando reequilibra los recursos entre programadores.

IScheduler::GetId (Método)

Devuelve un identificador único para el programador.

virtual unsigned int GetId() const = 0;

Valor devuelto

Identificador entero único.

Comentarios

Use la función GetSchedulerId para obtener un identificador único para el objeto que implementa la interfaz IScheduler antes de poder usar la interfaz como un parámetro en métodos que proporciona el Resource Manager. Se espera que devuelva el mismo identificador al invocar la función GetId.

Un identificador obtenido de un origen diferente podría dar lugar a un comportamiento sin definir.

IScheduler::GetPolicy (Método)

Devuelve una copia de la directiva del programador. Para obtener más información sobre las directivas del programador, consulte SchedulerPolicy.

virtual SchedulerPolicy GetPolicy() const = 0;

Valor devuelto

Copia de la directiva del programador.

IScheduler::NotifyResourcesExternallyBusy (Método)

Notifica a este programador que otros programadores emplean ahora los subprocesos de hardware que representa el conjunto de raíces del procesador virtual de la matriz ppVirtualProcessorRoots.

virtual void NotifyResourcesExternallyBusy(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

Parámetros

ppVirtualProcessorRoots
Matriz de interfaces IVirtualProcessorRoot asociada a los subprocesos de hardware en las que otros programadores han estado muy ocupados.

count
Número de interfaces de la matriz IVirtualProcessorRoot.

Comentarios

Es posible que un subproceso de hardware específico se asigne a varios programadores al mismo tiempo. Podría deberse a que no hay suficientes subprocesos de hardware en el sistema para satisfacer la simultaneidad mínima para todos los programadores, sin compartir recursos. También puede ser a causa de que los recursos se asignan temporalmente a otros programadores cuando el programador propietario no los use, por medio de todas sus raíces del procesador virtual en ese subproceso de hardware que se está desactivando.

El nivel de suscripción de un subproceso de hardware se indica mediante el número de subprocesos suscritos y las raíces del procesador virtual activadas asociadas a ese subproceso de hardware. Desde el punto de vista de un programador determinado, el nivel de suscripción externo de un subproceso de hardware es la parte de la suscripción con la que otros programador pueden participar. Las notificaciones de que los recursos están ocupados externamente se envían a un programador cuando el nivel de suscripción externa de un subproceso de hardware se mueve de cero a una zona de positivo.

Las notificaciones por medio de este método solo se envían a los programadores que tienen una directiva donde el valor de la clave de directiva MinConcurrency es igual al valor de la clave de directiva MaxConcurrency. Para obtener más información sobre las directivas del programador, consulte SchedulerPolicy.

Un programador con derecho a notificaciones obtiene un conjunto de notificaciones iniciales cuando se crea, informándole si los recursos que acaba de asignar están ocupados o inactivos de forma externa.

IScheduler::NotifyResourcesExternallyIdle (Método)

Notifica a este programador que otros programadores no emplean los subprocesos de hardware que representa el conjunto de raíces del procesador virtual de la matriz ppVirtualProcessorRoots.

virtual void NotifyResourcesExternallyIdle(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

Parámetros

ppVirtualProcessorRoots
Matriz de interfaces IVirtualProcessorRoot asociada a los subprocesos de hardware en las que otros programadores han estado inactivos.

count
Número de interfaces de la matriz IVirtualProcessorRoot.

Comentarios

Es posible que un subproceso de hardware específico se asigne a varios programadores al mismo tiempo. Podría deberse a que no hay suficientes subprocesos de hardware en el sistema para satisfacer la simultaneidad mínima para todos los programadores, sin compartir recursos. También puede ser a causa de que los recursos se asignan temporalmente a otros programadores cuando el programador propietario no los use, por medio de todas sus raíces del procesador virtual en ese subproceso de hardware que se está desactivando.

El nivel de suscripción de un subproceso de hardware se indica mediante el número de subprocesos suscritos y las raíces del procesador virtual activadas asociadas a ese subproceso de hardware. Desde el punto de vista de un programador determinado, el nivel de suscripción externo de un subproceso de hardware es la parte de la suscripción con la que otros programador pueden participar. Las notificaciones de que los recursos están ocupados externamente se envían a un programador cuando el nivel de suscripción externa de un subproceso de hardware se mueve de un valor positivo anterior a cero.

Las notificaciones por medio de este método solo se envían a los programadores que tienen una directiva donde el valor de la clave de directiva MinConcurrency es igual al valor de la clave de directiva MaxConcurrency. Para obtener más información sobre las directivas del programador, consulte SchedulerPolicy.

Un programador con derecho a notificaciones obtiene un conjunto de notificaciones iniciales cuando se crea, informándole si los recursos que acaba de asignar están ocupados o inactivos de forma externa.

IScheduler::RemoveVirtualProcessors (Método)

Inicia la eliminación de las raíces del procesador virtual asignadas anteriormente a este programador.

virtual void RemoveVirtualProcessors(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

Parámetros

ppVirtualProcessorRoots
Matriz de interfaces IVirtualProcessorRoot en la que se representan la raíces del procesador virtual que se van a quitar.

count
Número de interfaces de la matriz IVirtualProcessorRoot.

Comentarios

Resource Manager invoca el método RemoveVirtualProcessors para recuperar un conjunto inicial de raíces del procesador virtual desde un programador. Se espera que el programador invoque el método Quitar en cada interfaz cuando se hace con las raíces del procesador virtual. No use una interfaz IVirtualProcessorRoot una vez que haya invocado el método Remove en ella.

El parámetro ppVirtualProcessorRoots apunta a una matriz de interfaces. Entre el conjunto de raíces de procesador virtual que se van a quitar, las raíces que nunca se han activado se pueden devolver inmediatamente mediante el método Remove. Las raíces que se han activado y están ejecutando el trabajo o se han desactivado y están a la espera de que llegue el trabajo, deben devolverse de forma asincrónica. El programador debe hacer todos los intentos para quitar la raíz del procesador virtual lo antes posible. Al retrasar la eliminación de las raíces del procesador virtual, puede producirse una suscripción excesiva involuntaria dentro del programador.

IScheduler::Statistics (Método)

Proporciona información relacionada con las tasas de finalización y llegada de tareas y cambio de longitud de cola para un programador.

virtual void Statistics(
    _Out_ unsigned int* pTaskCompletionRate,
    _Out_ unsigned int* pTaskArrivalRate,
    _Out_ unsigned int* pNumberOfTasksEnqueued) = 0;

Parámetros

pTaskCompletionRate
El número de tareas que ha completado el programador desde la última llamada a este método.

pTaskArrivalRate
El número de tareas que ha llegado al programador desde la última llamada a este método.

pNumberOfTasksEnqueued
El número total de tareas en todas las colas del programador.

Comentarios

El Resource Manager invoca este método para recopilar estadísticas de un programador. Las estadísticas recopiladas aquí se usarán para impulsar algoritmos de comentarios dinámicos para determinar cuándo es apropiado asignar más recursos al programador y cuándo quitarlos. Los valores que proporciona el programador pueden ser optimistas y no reflejan necesariamente el recuento actual de forma exacta.

Debe implementar este método si quiere que el Resource Manager use comentarios sobre aspectos como las llegadas de tareas para determinar cómo equilibrar el recurso entre el programador y otros programadores registrados con el Resource Manager. Si decide no recopilar estadísticas, puede establecer la clave de directiva DynamicProgressFeedback en el valor DynamicProgressFeedbackDisabled de la directiva del programador y el Resource Manager no invocará este método en el programador.

A falta de información estadística, el Resource Manager usará los niveles de suscripción de subproceso de hardware para tomar decisiones de asignación de recursos y migración de recursos. Para más información sobre los niveles de suscripción, consulte IExecutionResource::CurrentSubscriptionLevel.

Consulte también

concurrency (espacio de nombres)
PolicyElementKey
SchedulerPolicy (clase)
IExecutionContext (estructura)
IThreadProxy (estructura)
IVirtualProcessorRoot (estructura)
IResourceManager (estructura)