Criteri dell'utilità di pianificazione
In questo documento viene descritto il ruolo dei criteri dell'utilità di pianificazione nel runtime di concorrenza. I criteri dell'utilità di pianificazione controllano la strategia utilizzata dall'utilità di pianificazione quando vengono gestite le attività. Ad esempio, si consideri un'applicazione che richiede che alcune attività siano eseguite con THREAD_PRIORITY_NORMAL e altre attività con THREAD_PRIORITY_HIGHEST. È possibile creare due istanze dell'utilità di pianificazione: uno che specifica THREAD_PRIORITY_NORMAL per i criteri di ContextPriority e l'altra che specifica THREAD_PRIORITY_HIGHEST per gli stessi criteri.
Utilizzando i criteri dell'utilità di pianificazione, è possibile dividere le risorse di elaborazione disponibili e assegnare un set prestabilito di risorse a ogni utilità di pianificazione. Si consideri, ad esempio, un algoritmo parallelo che non possa essere utilizzato con più di quattro processori. È possibile creare criteri dell'utilità di pianificazione che limitano le attività a utilizzare non più di quattro processori contemporaneamente.
Suggerimento
Il runtime di concorrenza fornisce un'utilità di pianificazione predefinita.Di conseguenza, non è necessario crearne una nell'applicazione.Poiché l'utilità di pianificazione consente di ottimizzare le prestazioni delle applicazioni, è consigliabile iniziare con la PPL (Parallel Patterns Library) o la Libreria di agenti asincroni se non si ha familiarità con il runtime di concorrenza.
Quando si utilizza il metodo concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create o concurrency::Scheduler::SetDefaultSchedulerPolicy per creare un'istanza dell'utilità di pianificazione, è possibile fornire un oggetto concurrency::SchedulerPolicy contenente una raccolta di coppie chiave-valore che specificano il comportamento dell'utilità di pianificazione. Il costruttore SchedulerPolicy accetta un numero variabile di argomenti. Il primo argomento rappresenta il numero di elementi dei criteri che verranno specificati. Gli argomenti restanti sono coppie chiave-valore per ogni elemento dei criteri. Nell'esempio seguente viene creato un oggetto SchedulerPolicy che specifica tre elementi dei criteri. Il runtime utilizza valori predefiniti per le chiavi dei criteri che non sono specificate.
SchedulerPolicy policy(3,
MinConcurrency, 2,
MaxConcurrency, 4,
ContextPriority, THREAD_PRIORITY_HIGHEST
);
L'enumerazione concurrency::PolicyElementKey definisce le chiavi dei criteri associate all'Utilità di pianificazione. Nella tabella seguente vengono descritte le chiavi dei criteri e il valore predefinito utilizzato dal runtime per ognuna di esse.
Chiave dei criteri |
Descrizione |
Valore predefinito |
---|---|---|
SchedulerKind |
Un valore concurrency::SchedulerType che specifica il tipo di thread da utilizzare per pianificare le attività. |
ThreadScheduler (utilizzare thread normali). Questo è l'unico valore valido per questa chiave. |
MaxConcurrency |
Un valore unsigned int che specifica il numero massimo di risorse di concorrenza che l'utilità di pianificazione utilizza. |
|
MinConcurrency |
Un valore unsigned int che specifica il numero minimo di risorse di concorrenza che l'utilità di pianificazione utilizza. |
1 |
TargetOversubscriptionFactor |
Un valore unsigned int che specifica il numero di thread da allocare per ogni risorsa di elaborazione. |
1 |
LocalContextCacheSize |
Un valore unsigned int che specifica il numero massimo di contesti che possono essere memorizzati nella cache nella coda locale di ogni processore virtuale. |
8 |
ContextStackSize |
Un valore unsigned int che specifica la dimensione dello stack, in kilobyte, da riservare per ogni contesto. |
0 (utilizzare la dimensione dello stack predefinita) |
ContextPriority |
Un valore int che specifica la priorità dei thread di ogni contesto. Può trattarsi di qualsiasi valore che è possibile passare a SetThreadPriority o INHERIT_THREAD_PRIORITY. |
THREAD_PRIORITY_NORMAL |
SchedulingProtocol |
Un valore concurrency::SchedulingProtocolType che specifica l'algoritmo di pianificazione da utilizzare. |
EnhanceScheduleGroupLocality |
DynamicProgressFeedback |
Un valore concurrency::DynamicProgressFeedbackType che specifica se ribilanciare le risorse in base alle informazioni sullo stato di avanzamento basato sulle statistiche. Nota Non impostare questi criteri su ProgressFeedbackDisabled perché sono riservati per essere utilizzati dal runtime. |
ProgressFeedbackEnabled |
Ogni utilità di pianificazione utilizza criteri personalizzati quando vengono pianificate le attività. I criteri associati a un'utilità di pianificazione non influiscono sul comportamento di un'altra utilità di pianificazione. Inoltre, una volta creato l'oggetto Scheduler non è possibile modificare i criteri dell'utilità di pianificazione.
Importante
Utilizzare i criteri dell'utilità di pianificazione solo per controllare gli attributi per i thread creati dal runtime.Non modificare l'affinità o la priorità dei thread creati dal runtime perché questo potrebbe causare un comportamento indefinito.
Il runtime crea un'utilità di pianificazione predefinita se non se ne crea una esplicitamente. Se si desidera utilizzare l'utilità di pianificazione predefinita nell'applicazione, ma si desidera specificare i criteri dell'utilità di pianificazione da utilizzare, chiamare il metodo concurrency::Scheduler::SetDefaultSchedulerPolicy prima di pianificare il lavoro parallelo. Se non si chiama il metodo Scheduler::SetDefaultSchedulerPolicy, il runtime utilizza i valori dei criteri predefiniti indicati nella tabella.
Utilizzare i metodi concurrency::CurrentScheduler::GetPolicy e concurrency::Scheduler::GetPolicy per recuperare una copia dei criteri dell'utilità di pianificazione. I valori dei criteri ricevuti da questi metodi possono differire dai valori dei criteri specificati quando viene creata l'utilità di pianificazione.
Esempio
Per esaminare gli esempi in cui vengono utilizzati i criteri dell'utilità di pianificazione specifici per controllare il comportamento dell'utilità di pianificazione, vedere Procedura: specificare criteri dell'utilità di pianificazione specifici e Procedura: creare agenti che utilizzano criteri dell'utilità di pianificazione specifici.
Vedere anche
Attività
Procedura: specificare criteri dell'utilità di pianificazione specifici
Procedura: creare agenti che utilizzano criteri dell'utilità di pianificazione specifici