Gruppi di pianificazione
In questo documento viene descritto il ruolo dei gruppi di pianificazione nel runtime di concorrenza. Un gruppo di pianificazione raggruppa insieme le attività correlate. Ogni utilità di pianificazione contiene uno o più gruppi di pianificazione. Utilizzare i gruppi di pianificazione quando è necessario un livello di località alto tra le attività, ad esempio quando un gruppo di attività correlate trae vantaggio dall'esecuzione nello stesso nodo del processore. Al contrario, utilizzare le istanze dell'utilità di pianificazione quando l'applicazione ha requisiti di qualità specifici, ad esempio quando si desidera limitare la quantità di risorse di elaborazione allocate a un set di attività. Per ulteriori informazioni sulle istanze dell'utilità di pianificazione, vedere Istanze dell'utilità di pianificazione.
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. |
Ogni oggetto Scheduler dispone di un gruppo di pianificazione predefinito per ogni nodo di pianificazione. Un nodo di pianificazione esegue il mapping alla topologia del sistema sottostante. Il runtime crea un nodo di pianificazione per ogni pacchetto del processore o nodo NUMA (Non-Uniform Memory Architecture), a seconda di quale sia il numero maggiore. Se non si associa in modo esplicito un'attività a un gruppo di pianificazione, l'utilità di pianificazione sceglie il gruppo a cui aggiungere l'attività.
I criteri dell'utilità di pianificazione SchedulingProtocol influiscono sull'ordine in cui l'utilità di pianificazione esegue le attività in ogni gruppo di pianificazione. Quando SchedulingProtocol viene impostato su EnhanceScheduleGroupLocality, ovvero il valore predefinito, l'Utilità di pianificazione sceglie l'attività successiva dal gruppo di pianificazione utilizzato nel momento in cui l'attività corrente viene completata o restituita in modo cooperativo. L'Utilità di pianificazione ricerca il lavoro nel gruppo di pianificazione corrente prima di spostarsi nel gruppo successivo disponibile. Al contrario, quando SchedulingProtocol viene impostato su EnhanceForwardProgress, l'utilità di pianificazione si sposta nel gruppo di pianificazione successivo dopo il completamento o la restituzione di ogni attività. Per un esempio in cui vengono confrontati questi criteri, vedere Procedura: utilizzare i gruppi di pianificazione per influenzare l'ordine di esecuzione.
Il runtime utilizza la classe Concurrency::ScheduleGroup per rappresentare i gruppi di pianificazione. Per creare un oggetto ScheduleGroup, chiamare il metodo Concurrency::CurrentScheduler::CreateScheduleGroup o Concurrency::Scheduler::CreateScheduleGroup. Il runtime utilizza un meccanismo di conteggio dei riferimenti per controllare la durata degli oggetti ScheduleGroup, in modo analogo a quello utilizzato per gli oggetti Scheduler. Quando si crea un oggetto ScheduleGroup, il runtime imposta il contatore dei riferimenti su uno. Il metodo Concurrency::ScheduleGroup::Reference incrementa il contatore dei riferimenti di uno. Il metodo Concurrency::ScheduleGroup::Release decrementa il contatore dei riferimenti di uno.
Molti tipi nel runtime di concorrenza consentono di associare un oggetto a un gruppo di pianificazione. Ad esempio, la classe Concurrency::agent e le classi del blocco dei messaggi quali Concurrency::unbounded_buffer, Concurrency::join e Concurrency::timer forniscono versioni di overload del costruttore che accettano un oggetto ScheduleGroup. Il runtime utilizza l'oggetto Scheduler associato all'oggetto ScheduleGroup per pianificare l'attività.
È inoltre possibile utilizzare il metodo Concurrency::ScheduleGroup::ScheduleTask per pianificare un'attività leggera. Per ulteriori informazioni sulle attività leggere, vedere Attività leggere.
Esempio
Per un esempio in cui vengono utilizzati i gruppi di pianificazione per controllare l'ordine di esecuzione delle attività, vedere Procedura: utilizzare i gruppi di pianificazione per influenzare l'ordine di esecuzione.
Vedere anche
Concetti
Utilità di pianificazione (runtime di concorrenza)
Altre risorse
Istanze dell'utilità di pianificazione
Procedura: utilizzare i gruppi di pianificazione per influenzare l'ordine di esecuzione
Cronologia delle modifiche
Data |
Cronologia |
Motivo |
---|---|---|
Luglio 2010 |
Il contenuto è stato riorganizzato. |
Miglioramento delle informazioni. |