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à. L'applicazione può richiedere, ad esempio, che per alcune attività vengano utilizzati i thread pianificabili in modalità utente, mentre per altre attività venga utilizzato il normale meccanismo di threading. È possibile creare due istanze dell'utilità di pianificazione: una che specifica la creazione dei thread pianificabili in modalità utente come parte dei criteri dell'utilità di pianificazione e un'altra che specifica i thread normali come parte dei criteri dell'utilità di pianificazione. Per ulteriori informazioni sulla pianificazione in modalità utente, vederePianificazione in modalità utente.

I criteri dell'utilità di pianificazione consentono inoltre di 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.

SuggerimentoSuggerimento

Il runtime di concorrenza fornisce un'utilità di pianificazione predefinita, pertanto 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 un insieme 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 i 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 se utilizzare thread normali o thread pianificabili in modalità utente per pianificare le attività.

ThreadScheduler (utilizzare thread normali)

MaxConcurrency

Un valore unsigned int che specifica il numero massimo di risorse di concorrenza che l'utilità di pianificazione utilizza.

Concurrency::MaxExecutionResources

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.

Notare non impostare questi criteri su ProgressFeedbackDisabled. ProgressFeedbackDisabled è riservato all'utilizzo da parte del runtime.

ProgressFeedbackEnabled

Ogni utilità di pianificazione utilizza criteri personalizzati quando vengono pianificate le attività. Pertanto, 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.

Nota importanteImportante

Utilizzare i criteri dell'utilità di pianificazione solo per controllare gli attributi per i thread creati dal runtime. La modifica dell'affinità o della priorità dei thread creati dal runtime produce 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. Il valore dei criteri UMSThreadDefault specifica, ad esempio, che l'utilità di pianificazione utilizza i thread pianificabili in modalità utente se tale funzionalità è disponibile nel sistema operativo, ad esempio la versione a 64 bit di Windows 7. Se i thread pianificabili in modalità utente non sono disponibili, l'utilità di pianificazione imposta questo valore dei criteri su ThreadScheduler, a indicare che l'utilità di pianificazione deve utilizzare i thread normali.

Esempio

Per 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

Concetti

Utilità di pianificazione (runtime di concorrenza)

Cronologia delle modifiche

Data

Cronologia

Motivo

Luglio 2010

Il contenuto è stato riorganizzato.

Miglioramento delle informazioni.