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.
Suggerimento |
---|
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. |
|
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.
Importante |
---|
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. |