Share via


Struttura IScheduler

Un'interfaccia a un'astrazione di un'utilità di pianificazione del lavoro. Gestione risorse del runtime di concorrenza usa tale interfaccia per comunicare con le utilità di pianificazione del lavoro.

Sintassi

struct IScheduler;

Membri

Metodi pubblici

Nome Descrizione
IScheduler::AddVirtualProcessors Fornisce un'utilità di pianificazione con un set di radici del processore virtuale per l'uso. Ogni IVirtualProcessorRoot interfaccia rappresenta il diritto di eseguire un singolo thread che può eseguire operazioni per conto dell'utilità di pianificazione.
IScheduler::GetId Restituisce un identificatore univoco per l'utilità di pianificazione.
IScheduler::GetPolicy Restituisce una copia dei criteri dell'utilità di pianificazione. Per altre informazioni sui criteri dell'utilità di pianificazione, vedere SchedulerPolicy.
IScheduler::NotifyResourcesExternallyBusy Notifica a questo utilità di pianificazione che i thread hardware rappresentati dal set di radici del processore virtuale nella matrice ppVirtualProcessorRoots vengono ora usati da altri utilità di pianificazione.
IScheduler::NotifyResourcesExternallyIdle Notifica a questa utilità di pianificazione che i thread hardware rappresentati dal set di radici del processore virtuale nella matrice ppVirtualProcessorRoots non vengono usati da altri utilità di pianificazione.
IScheduler::RemoveVirtualProcessors Avvia la rimozione delle radici del processore virtuale allocate in precedenza a questa utilità di pianificazione.
IScheduler::Statistics Fornisce informazioni relative alle tariffe di arrivo e completamento delle attività e alla modifica della lunghezza della coda per un'utilità di pianificazione.

Osservazioni:

Se si implementa un'utilità di pianificazione personalizzata che comunica con Resource Manager, è necessario fornire un'implementazione dell'interfaccia IScheduler . Questa interfaccia è un'estremità di un canale bidirezionale di comunicazione tra un'utilità di pianificazione e Resource Manager. L'altra estremità è rappresentata dalle IResourceManager interfacce e ISchedulerProxy implementate da Resource Manager.

Gerarchia di ereditarietà

IScheduler

Requisiti

Intestazione: concrtrm.h

Spazio dei nomi: Concurrency

Metodo IScheduler::AddVirtualProcessors

Fornisce un'utilità di pianificazione con un set di radici del processore virtuale per l'uso. Ogni IVirtualProcessorRoot interfaccia rappresenta il diritto di eseguire un singolo thread che può eseguire operazioni per conto dell'utilità di pianificazione.

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

Parametri

ppVirtualProcessorRoots
Matrice di IVirtualProcessorRoot interfacce che rappresentano le radici del processore virtuale aggiunte all'utilità di pianificazione.

count
Numero di IVirtualProcessorRoot interfacce nella matrice.

Osservazioni:

Resource Manager richiama il AddVirtualProcessor metodo per concedere un set iniziale di radici del processore virtuale a un'utilità di pianificazione. Può anche richiamare il metodo per aggiungere radici del processore virtuale all'utilità di pianificazione quando ribilancia le risorse tra le utilità di pianificazione.

Metodo IScheduler::GetId

Restituisce un identificatore univoco per l'utilità di pianificazione.

virtual unsigned int GetId() const = 0;

Valore restituito

Identificatore integer univoco.

Osservazioni:

È consigliabile usare la funzione GetSchedulerId per ottenere un identificatore univoco per l'oggetto che implementa l'interfaccia, prima di usare l'interfaccia IScheduler come parametro per i metodi forniti da Resource Manager. Si prevede di restituire lo stesso identificatore quando viene richiamata la GetId funzione.

Un identificatore ottenuto da un'origine diversa potrebbe comportare un comportamento non definito.

Metodo IScheduler::GetPolicy

Restituisce una copia dei criteri dell'utilità di pianificazione. Per altre informazioni sui criteri dell'utilità di pianificazione, vedere SchedulerPolicy.

virtual SchedulerPolicy GetPolicy() const = 0;

Valore restituito

Copia dei criteri dell'utilità di pianificazione.

Metodo IScheduler::NotifyResourcesExternallyBusy

Notifica a questo utilità di pianificazione che i thread hardware rappresentati dal set di radici del processore virtuale nella matrice ppVirtualProcessorRoots vengono ora usati da altri utilità di pianificazione.

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

Parametri

ppVirtualProcessorRoots
Matrice di IVirtualProcessorRoot interfacce associate ai thread hardware in cui gli altri utilità di pianificazione sono diventati occupati.

count
Numero di IVirtualProcessorRoot interfacce nella matrice.

Osservazioni:

È possibile assegnare un thread hardware specifico a più utilità di pianificazione contemporaneamente. Un motivo per questo potrebbe essere che nel sistema non sono presenti thread hardware sufficienti per soddisfare la concorrenza minima per tutte le utilità di pianificazione, senza condividere le risorse. Un'altra possibilità è che le risorse vengano assegnate temporaneamente ad altre utilità di pianificazione quando l'utilità di pianificazione proprietaria non le usa, a modo di tutte le radici del processore virtuale su quel thread hardware disattivato.

Il livello di sottoscrizione di un thread hardware è indicato dal numero di thread sottoscritti e dalle radici del processore virtuale attivate associate a tale thread hardware. Dal punto di vista di un'utilità di pianificazione particolare, il livello di sottoscrizione esterna di un thread hardware è la parte della sottoscrizione a cui contribuiscono altre utilità di pianificazione. Le notifiche che le risorse sono esternamente occupate vengono inviate a un'utilità di pianificazione quando il livello di sottoscrizione esterna per un thread hardware passa da zero a un territorio positivo.

Le notifiche tramite questo metodo vengono inviate solo alle utilità di pianificazione che dispongono di un criterio in cui il valore per la chiave dei MinConcurrency criteri è uguale al valore per la MaxConcurrency chiave dei criteri. Per altre informazioni sui criteri dell'utilità di pianificazione, vedere SchedulerPolicy.

Un'utilità di pianificazione che qualifica le notifiche ottiene un set di notifiche iniziali al momento della creazione, informandolo se le risorse appena assegnate sono occupate esternamente o inattive.

Metodo IScheduler::NotifyResourcesExternallyIdle

Notifica a questa utilità di pianificazione che i thread hardware rappresentati dal set di radici del processore virtuale nella matrice ppVirtualProcessorRoots non vengono usati da altri utilità di pianificazione.

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

Parametri

ppVirtualProcessorRoots
Matrice di interfacce associate ai thread hardware in cui altre utilità di IVirtualProcessorRoot pianificazione sono diventate inattive.

count
Numero di IVirtualProcessorRoot interfacce nella matrice.

Osservazioni:

È possibile assegnare un thread hardware specifico a più utilità di pianificazione contemporaneamente. Un motivo per questo potrebbe essere che nel sistema non sono presenti thread hardware sufficienti per soddisfare la concorrenza minima per tutte le utilità di pianificazione, senza condividere le risorse. Un'altra possibilità è che le risorse vengano assegnate temporaneamente ad altre utilità di pianificazione quando l'utilità di pianificazione proprietaria non le usa, a modo di tutte le radici del processore virtuale su quel thread hardware disattivato.

Il livello di sottoscrizione di un thread hardware è indicato dal numero di thread sottoscritti e dalle radici del processore virtuale attivate associate a tale thread hardware. Dal punto di vista di un'utilità di pianificazione particolare, il livello di sottoscrizione esterna di un thread hardware è la parte della sottoscrizione a cui contribuiscono altre utilità di pianificazione. Le notifiche che le risorse sono esternamente occupate vengono inviate a un'utilità di pianificazione quando il livello di sottoscrizione esterna per un thread hardware scende a zero da un valore positivo precedente.

Le notifiche tramite questo metodo vengono inviate solo alle utilità di pianificazione che dispongono di un criterio in cui il valore per la chiave dei MinConcurrency criteri è uguale al valore per la MaxConcurrency chiave dei criteri. Per altre informazioni sui criteri dell'utilità di pianificazione, vedere SchedulerPolicy.

Un'utilità di pianificazione che qualifica le notifiche ottiene un set di notifiche iniziali al momento della creazione, informandolo se le risorse appena assegnate sono occupate esternamente o inattive.

Metodo IScheduler::RemoveVirtualProcessors

Avvia la rimozione delle radici del processore virtuale allocate in precedenza a questa utilità di pianificazione.

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

Parametri

ppVirtualProcessorRoots
Matrice di IVirtualProcessorRoot interfacce che rappresentano le radici del processore virtuale da rimuovere.

count
Numero di IVirtualProcessorRoot interfacce nella matrice.

Osservazioni:

Resource Manager richiama il RemoveVirtualProcessors metodo per recuperare un set di radici del processore virtuale da un'utilità di pianificazione. L'utilità di pianificazione deve richiamare il metodo Remove in ogni interfaccia quando viene eseguita con le radici del processore virtuale. Non usare un'interfaccia IVirtualProcessorRoot dopo aver richiamato il Remove metodo su di esso.

Il parametro ppVirtualProcessorRoots punta a una matrice di interfacce. Tra il set di radici del processore virtuale da rimuovere, le radici non sono mai state attivate possono essere restituite immediatamente usando il Remove metodo . Le radici attivate e sono in esecuzione o sono state disattivate e sono in attesa dell'arrivo del lavoro, devono essere restituite in modo asincrono. L'utilità di pianificazione deve eseguire ogni tentativo di rimuovere la radice del processore virtuale il più rapidamente possibile. La rimozione ritardata delle radici del processore virtuale può comportare un oversubscription involontario all'interno dell'utilità di pianificazione.

Metodo IScheduler::Statistics

Fornisce informazioni relative alle tariffe di arrivo e completamento delle attività e alla modifica della lunghezza della coda per un'utilità di pianificazione.

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

Parametri

pTaskCompletionRate
Numero di attività completate dall'utilità di pianificazione dall'ultima chiamata a questo metodo.

pTaskArrivalRate
Numero di attività arrivate nell'utilità di pianificazione dall'ultima chiamata a questo metodo.

pNumberOfTasksEnqueued
Numero totale di attività in tutte le code dell'utilità di pianificazione.

Osservazioni:

Questo metodo viene richiamato da Resource Manager per raccogliere statistiche per un'utilità di pianificazione. Le statistiche raccolte qui verranno usate per guidare algoritmi di feedback dinamici per determinare quando è appropriato assegnare più risorse all'utilità di pianificazione e quando eliminare le risorse. I valori forniti dall'utilità di pianificazione possono essere ottimistici e non devono necessariamente riflettere il conteggio corrente in modo accurato.

È necessario implementare questo metodo se si desidera che in Gestione risorse venga utilizzato un feedback in merito all'arrivo delle attività per determinare come bilanciare la risorsa tra la propria utilità di pianificazione e le altre registrate con Gestione risorse. Se si sceglie di non raccogliere statistiche, è possibile impostare la chiave DynamicProgressFeedback dei criteri sul valore DynamicProgressFeedbackDisabled nei criteri dell'utilità di pianificazione e Resource Manager non richiamerà questo metodo nell'utilità di pianificazione.

In assenza di informazioni statistiche, Resource Manager userà i livelli di sottoscrizione del thread hardware per prendere decisioni relative all'allocazione delle risorse e alla migrazione. Per altre informazioni sui livelli di sottoscrizione, vedere IExecutionResource::CurrentSubscriptionLevel.

Vedi anche

Spazio dei nomi concurrency
PolicyElementKey
Classe SchedulerPolicy
Struttura IExecutionContext
Struttura IThreadProxy
Struttura IVirtualProcessorRoot
Struttura IResourceManager