Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una interfaz para una abstracción de un planificador de tareas. El Administrador de recursos del entorno 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 a un programador un conjunto de procesadores virtuales para su uso. Cada interfaz IVirtualProcessorRoot representa el derecho a ejecutar un único subproceso que puede realizar el trabajo por el planificador. |
| 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 planificador que los subprocesos de hardware representados por el conjunto de raíces del procesador virtual en la matriz ppVirtualProcessorRoots están siendo utilizados ahora por otros planificadores. |
| 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 sobre el cambio en la longitud de la cola, así como las tasas de llegada y finalización de tareas 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 a un programador un conjunto de raíces del procesador virtual para su uso. Cada interfaz IVirtualProcessorRoot representa el derecho a ejecutar un único subproceso que puede realizar trabajo en representación del planificador.
virtual void AddVirtualProcessors(
_In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
unsigned int count) = 0;
Parámetros
ppVirtualProcessorRoots
Matriz de interfaces IVirtualProcessorRoot que representan las raíces del procesador virtual que se agregan al planificador.
count
Número de interfaces de la matriz IVirtualProcessorRoot.
Comentarios
El Administrador de Recursos invoca el método AddVirtualProcessor para conceder un conjunto inicial de raíces de procesador virtual a un planificador. También podría invocar el método para agregar raíces de procesadores virtuales al planificador cuando reequilibra los recursos entre planificadores.
Método IScheduler::GetId
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 planificador que los subprocesos de hardware representados por el conjunto de raíces del procesador virtual en la matriz ppVirtualProcessorRoots están siendo utilizados ahora por otros planificadores.
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 hilo de hardware específico se asigne a varios planificadores 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. Otra posibilidad es que los recursos se asignen temporalmente a otros planificadores cuando el planificador propietario no los está usando, desactivando todas sus raíces de procesador virtual en ese hilo de hardware.
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 planificador determinado, el nivel de suscripción externo de un hardware thread es la parte de suscripción a la que otros planificadores contribuyen. Las notificaciones de que los recursos están ocupados externamente se envían a un schedulador cuando el nivel de suscripción externa de un subproceso de hardware pasa de cero a un valor 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 planificador que califica para recibir notificaciones obtiene un conjunto inicial de notificaciones cuando se crea, informándole si los recursos que se le acaban de asignar están ocupados o inactivos externamente.
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 asociadas a los subprocesos de hardware en las cuales otros planificadores se han vuelto inactivos.
count
Número de interfaces de la matriz IVirtualProcessorRoot.
Comentarios
Es posible que un subproceso de hardware específico se asigne a varios planificadores 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. Otra posibilidad es que los recursos son asignados temporalmente a otros planificadores cuando el planificador propietario no los está utilizando, mediante la desactivación de todas sus raíces de procesadores virtuales en ese subproceso de hardware al desactivarse.
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 planificador determinado, el nivel de suscripción externo de un subproceso de hardware es la parte de la suscripción a la que otros planificadores contribuyen. 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 planificador con derecho a notificaciones obtiene un conjunto inicial de notificaciones al crearse, informándole si los recursos que se le acaban de asignar están ocupados o inactivos.
Método IScheduler::RemoveVirtualProcessors
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
El Resource Manager invoca el método RemoveVirtualProcessors para recuperar un conjunto de raíces de procesadores virtuales desde un planificador. Se espera que el planificador invoque el método Quitar en cada interfaz cuando haya terminado 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 sobresuscripción involuntaria dentro del planificador.
IScheduler::Statistics (Método)
Proporciona información sobre el cambio en la longitud de la cola, así como las tasas de llegada y finalización de tareas 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 han llegado al planificador desde la última llamada a este método.
pNumberOfTasksEnqueued
El número total de tareas en todas las colas del planificador.
Comentarios
El Administrador de Recursos invoca este método para recopilar estadísticas de un planificador. 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 desea que el Administrador de Recursos utilice retroalimentación sobre aspectos como la llegada de tareas para determinar cómo equilibrar los recursos entre su planificador y otros planificadores registrados con el Administrador de Recursos. 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 y migración de recursos. Para más información sobre los niveles de suscripción, consulte IExecutionResource::CurrentSubscriptionLevel.
Consulte también
espacio de nombres de concurrencia
PolicyElementKey
SchedulerPolicy Clase
IExecutionContext (estructura)
IThreadProxy (estructura)
IVirtualProcessorRoot (estructura)
IResourceManager (estructura)