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à.Si consideri ad esempio un'applicazione che richiede alcune operazioni da eseguire al THREAD_PRIORITY_NORMAL e altre operazioni da eseguire in THREAD_PRIORITY_HIGHEST.È possibile creare due istanze dell'utilità di pianificazione: uno che specifica il ContextPriority i criteri THREAD_PRIORITY_NORMAL e un'altra che specifica lo stesso criterio per essere THREAD_PRIORITY_HIGHEST.
Utilizzando i criteri di pianificazione, è possibile suddividere le risorse di elaborazione disponibili e assegnare un insieme fisso di risorse per ogni tipo 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 concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create, o concurrency::Scheduler::SetDefaultSchedulerPolicy metodo per creare un'istanza dell'utilità di pianificazione, si fornisce un concurrency::SchedulerPolicy oggetto che contiene 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 di criteri non sono specificate.
SchedulerPolicy policy(3,
MinConcurrency, 2,
MaxConcurrency, 4,
ContextPriority, THREAD_PRIORITY_HIGHEST
);
Il concurrency::PolicyElementKey enumerazione definisce i tasti di criteri associati con l'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 |
A concurrency::SchedulerType valore che specifica il tipo di thread da utilizzare per pianificare le attività. |
ThreadScheduler(utilizzare thread normale).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 |
A concurrency::SchedulingProtocolType valore che specifica l'algoritmo di programmazione da utilizzare. |
EnhanceScheduleGroupLocality |
DynamicProgressFeedback |
A concurrency::DynamicProgressFeedbackType valore che specifica se di ribilanciamento delle risorse in base alle informazioni statistiche basate sull'avanzamento. Nota si imposta questo criterio su ProgressFeedbackDisabled perché è riservato per l'utilizzo in fase di esecuzione. |
ProgressFeedbackEnabled |
Ogni utilità di pianificazione utilizza criteri personalizzati quando vengono pianificate le attività.I criteri che sono associati a una pianificazione non influenzano il comportamento di altre 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à di thread o la priorità di thread creati da Common Language runtime dal momento che 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 dell'applicazione, ma si desidera specificare un criterio per l'utilità di pianificazione da utilizzare, chiamare il concurrency::Scheduler::SetDefaultSchedulerPolicy metodo 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 il concurrency::CurrentScheduler::GetPolicy e concurrency::Scheduler::GetPolicy i metodi per recuperare una copia del criterio 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 che utilizzano i criteri specifici di pianificazione 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