Delen via


Schedulerbeleid

In dit document wordt de rol van scheduler-beleid in de Gelijktijdigheidsruntime beschreven. Een scheduler-beleid bepaalt de strategie die de scheduler gebruikt bij het beheren van taken. Denk bijvoorbeeld aan een toepassing waarvoor bepaalde taken moeten worden uitgevoerd op THREAD_PRIORITY_NORMAL en andere taken op THREAD_PRIORITY_HIGHEST. U kunt twee scheduler-exemplaren maken: één exemplaar dat het ContextPriority-beleid specificeert als THREAD_PRIORITY_NORMAL en een ander dat hetzelfde beleid specificeert als THREAD_PRIORITY_HIGHEST.

Met behulp van scheduler-beleid kunt u de beschikbare verwerkingsbronnen verdelen en een vaste set resources toewijzen aan elke planner. Denk bijvoorbeeld aan een parallel algoritme dat niet groter is dan vier processors. U kunt een scheduler-beleid maken dat de taken beperkt tot maximaal vier processors tegelijk.

Aanbeveling

De Gelijktijdigheidsruntime biedt een standaardplanner. Daarom hoeft u er geen te maken in uw toepassing. Omdat task scheduler u helpt bij het verfijnen van de prestaties van uw toepassingen, raden we u aan om te beginnen met de PPL (Parallel Patterns Library) of de Asynchrone agents-bibliotheek als u niet bekend bent met de Gelijktijdigheidsruntime.

Wanneer u de methoden concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create of concurrency::Scheduler::SetDefaultSchedulerPolicy gebruikt om een scheduler-instantie te maken, levert u een concurrency::SchedulerPolicy-object aan dat een collectie sleutelwaardeparen bevat die het gedrag van de scheduler specificeren. De SchedulerPolicy constructor gebruikt een variabel aantal argumenten. Het eerste argument is het aantal beleidselementen dat u gaat opgeven. De resterende argumenten zijn sleutel-waardeparen voor elk beleidselement. In het volgende voorbeeld wordt een SchedulerPolicy object gemaakt dat drie beleidselementen aangeeft. De runtime gebruikt standaardwaarden voor de beleidssleutels die niet zijn opgegeven.

SchedulerPolicy policy(3,       
   MinConcurrency, 2,
   MaxConcurrency, 4,
   ContextPriority, THREAD_PRIORITY_HIGHEST
);

De enumeratie concurrency::PolicyElementKey definieert de beleidssleutels die zijn gekoppeld aan de Task Scheduler. In de volgende tabel worden de beleidssleutels en de standaardwaarde beschreven die de runtime voor elk van deze sleutels gebruikt.

Beleidssleutel Beschrijving Standaardwaarde
SchedulerKind Een concurrency::SchedulerType-waarde die het type threads specificeert dat moet worden gebruikt om taken te plannen. ThreadScheduler (gebruik normale threads). Dit is de enige geldige waarde voor deze sleutel.
MaxConcurrency Een unsigned int waarde die het maximum aantal gelijktijdigheidsbronnen aangeeft dat de scheduler gebruikt. concurrency::MaxExecutionResources
MinConcurrency Een unsigned int waarde die het minimale aantal gelijktijdigheidsbronnen aangeeft dat de scheduler gebruikt. 1
TargetOversubscriptionFactor Een unsigned int waarde die aangeeft hoeveel threads aan elke verwerkingsresource moeten worden toegewezen. 1
LocalContextCacheSize Een unsigned int waarde die het maximum aantal contexten aangeeft dat in de lokale wachtrij van elke virtuele processor in de cache kan worden opgeslagen. 8
ContextStackSize Een unsigned int waarde die de grootte van de stack in kilobytes aangeeft die voor elke context moet worden gereserveerd. 0 (gebruik de standaardstackgrootte)
ContextPriority Een int waarde die de threadprioriteit van elke context aangeeft. Dit kan elke waarde zijn die u kunt doorgeven aan SetThreadPriority of INHERIT_THREAD_PRIORITY. THREAD_PRIORITY_NORMAL
SchedulingProtocol Een waarde van gelijktijdigheid::SchedulingProtocolType waarmee het planningsalgoritme wordt gespecificeerd dat moet worden gebruikt. EnhanceScheduleGroupLocality
DynamicProgressFeedback Een gelijktijdigheid::D ynamicProgressFeedbackType-waarde waarmee wordt aangegeven of resources moeten worden hervergelijkd op basis van voortgangsgegevens op basis van statistieken.

Notitie Stel dit beleid ProgressFeedbackDisabled niet in op omdat het is gereserveerd voor gebruik door de runtime.
ProgressFeedbackEnabled

Elke planner gebruikt een eigen beleid wanneer taken worden gepland. Het beleid dat aan één planner is gekoppeld, heeft geen invloed op het gedrag van een andere planner. Bovendien kunt u het scheduler-beleid niet wijzigen nadat u het Scheduler object hebt gemaakt.

Belangrijk

Gebruik alleen scheduler-beleid om de kenmerken te beheren voor threads die door de runtime worden gemaakt. Wijzig niet de threadaffiniteit of prioriteit van threads die door de runtime worden gemaakt, omdat dit niet-gedefinieerd gedrag kan veroorzaken.

De runtime maakt een standaardplanner voor u als u er niet expliciet een maakt. Als u de standaardplanner in uw toepassing wilt gebruiken, maar u een beleid wilt opgeven dat door die planner moet worden gebruikt, roept u de gelijktijdigheid aan::Scheduler::SetDefaultSchedulerPolicy-methode voordat u parallelle werkzaamheden plant. Als u de Scheduler::SetDefaultSchedulerPolicy methode niet aanroept, gebruikt de runtime de standaardbeleidswaarden uit de tabel.

Gebruik de concurrency::CurrentScheduler::GetPolicy en de concurrency::Scheduler::GetPolicy-methoden om een kopie van het scheduler-beleid op te halen. De beleidswaarden die u van deze methoden ontvangt, kunnen verschillen van de beleidswaarden die u opgeeft wanneer u de scheduler maakt.

Voorbeeld

Om voorbeelden te onderzoeken die specifieke planningsbeleid gebruiken om het gedrag van de planner te beheersen, zie How to: Specify Specific Scheduler Policies en How to: Create Agents that Use Specific Scheduler Policies.

Zie ook

Taakplanner
Procedure: Specifieke scheduler-beleidsregels opgeven
Procedure: Agents maken die gebruikmaken van specifiek scheduler-beleid