Share via


Gruppi di pianificazione

Questo documento descrive il ruolo dei gruppi di pianificazione nel runtime di concorrenza. Un gruppo di pianificazione affinizza, o raggruppa, le attività correlate. Ogni utilità di pianificazione ha uno o più gruppi di pianificazione. Usare i gruppi di pianificazione quando è necessario un livello elevato di località tra le attività, ad esempio quando un gruppo di attività correlate trae vantaggio dall'esecuzione nello stesso nodo del processore. Al contrario, usare istanze dell'utilità di pianificazione quando l'applicazione ha requisiti di qualità specifici, ad esempio quando si vuole limitare la quantità di risorse di elaborazione allocate a un set di attività. Per altre 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 libreria PPL (Parallel Patterns Library) o la libreria degli agenti asincroni se non si ha una novità del runtime di concorrenza.

Ogni Scheduler oggetto ha un gruppo di pianificazione predefinito per ogni nodo di pianificazione. Un nodo di pianificazione esegue il mapping alla topologia di sistema sottostante. Il runtime crea un nodo di pianificazione per ogni pacchetto del processore o nodo NUMA (Non-Uniform Memory Architecture), a seconda del 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 SchedulingProtocol criteri dell'utilità di pianificazione influiscono sull'ordine in cui l'utilità di pianificazione esegue le attività in ogni gruppo di pianificazione. Quando SchedulingProtocol è impostato su EnhanceScheduleGroupLocality (ovvero l'impostazione predefinita), l'Utilità di pianificazione sceglie l'attività successiva dal gruppo di pianificazione su cui sta lavorando al termine dell'attività corrente o restituisce in modo cooperativo. L'Utilità di pianificazione cerca il lavoro nel gruppo di pianificazione corrente prima di passare al gruppo disponibile successivo. Al contrario, quando SchedulingProtocol è impostato su EnhanceForwardProgress, l'utilità di pianificazione passa al gruppo di pianificazione successivo al termine o alla resa di ogni attività. Per un esempio che confronta questi criteri, vedere Procedura: Usare i gruppi di pianificazione per influenzare l'ordine di esecuzione.

Il runtime usa la classe concurrency::ScheduleGroup per rappresentare i gruppi di pianificazione. Per creare un ScheduleGroup oggetto, chiamare il metodo concurrency::CurrentScheduler::CreateScheduleGroup o concurrency::Scheduler::CreateScheduleGroup . Il runtime usa un meccanismo di conteggio dei riferimenti per controllare la durata degli ScheduleGroup oggetti, esattamente come avviee con Scheduler gli oggetti. Quando si crea un ScheduleGroup oggetto, il runtime imposta il contatore di riferimento su uno. Il metodo concurrency::ScheduleGroup::Reference incrementa il contatore di riferimento di uno. Il metodo concurrency::ScheduleGroup::Release decrementa il contatore di riferimento di uno.

Molti tipi nel runtime di concorrenza consentono di associare un oggetto insieme a un gruppo di pianificazione. Ad esempio, le classi concurrency::agent e i blocchi di messaggi, ad esempio concurrency::unbounded_buffer, concurrency::join e concurrency::timer, forniscono versioni di overload del costruttore che accettano un ScheduleGroup oggetto. Il runtime usa l'oggetto Scheduler associato a questo ScheduleGroup oggetto per pianificare l'attività.

È anche possibile usare il metodo concurrency::ScheduleGroup::ScheduleTask per pianificare un'attività leggera. Per altre informazioni sulle attività leggere, vedere Attività leggere.

Esempio

Per un esempio che usa i gruppi di pianificazione per controllare l'ordine di esecuzione delle attività, vedere Procedura: Usare i gruppi di pianificazione per influenzare l'ordine di esecuzione.

Vedi anche

Utilità di pianificazione
Istanze dell'utilità di pianificazione
Procedura: Usare i gruppi di pianificazione per influenzare l'ordine di esecuzione