Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här dokumentet beskriver rollen för schemagrupper i Concurrency Runtime. En schemagrupp affinierar, eller grupperar, relaterade uppgifter tillsammans. Varje schemaläggare har en eller flera schemagrupper. Använd schemagrupper när du behöver en hög grad av lokalitet bland aktiviteter, till exempel när en grupp relaterade uppgifter drar nytta av att köras på samma processornod. Använd däremot scheduler-instanser när ditt program har specifika kvalitetskrav, till exempel när du vill begränsa mängden bearbetningsresurser som allokeras till en uppsättning aktiviteter. Mer information om scheduler-instanser finns i Scheduler-instanser.
Tips/Råd
Concurrency Runtime tillhandahåller en standardschemaläggare och därför behöver du inte skapa en i ditt program. Eftersom Schemaläggaren hjälper dig att finjustera prestanda för dina program rekommenderar vi att du börjar med PPL (Parallel Patterns Library) eller Asynchronous Agents Library om du är nybörjare på Concurrency Runtime.
Varje Scheduler objekt har en standardschemagrupp för varje schemaläggningsnod. En schemaläggningsnod mappar till den underliggande systemtopologin. Körningen skapar en schemaläggningsnod för varje processorpaket eller NUMA-nod (Non-Uniform Memory Architecture), beroende på vilket tal som är större. Om du inte uttryckligen associerar en aktivitet med en schemagrupp väljer schemaläggaren vilken grupp som aktiviteten ska läggas till i.
Scheduler-principen SchedulingProtocol påverkar i vilken ordning schemaläggaren kör aktiviteterna i varje schemagrupp. När SchedulingProtocol är inställt på EnhanceScheduleGroupLocality (vilket är standard) väljer Aktivitetsschemaläggaren nästa aktivitet från den schemagrupp som den arbetar med när den aktuella aktiviteten är klar eller avslutas frivilligt. Schemaläggaren söker efter arbete i den aktuella schemagruppen innan den flyttas till nästa tillgängliga grupp. När SchedulingProtocol är inställt på EnhanceForwardProgress, flyttar schemaläggaren till nästa schemagrupp efter att varje aktivitet har slutförts eller avbryter. För ett exempel som jämför dessa principer, se Så här: Använd schemagrupper för att påverka utförandeordningen.
Körningen använder concurrency::ScheduleGroup-klassen för att representera schema grupper. Om du vill skapa ett ScheduleGroup objekt anropar du metoden concurrency::CurrentScheduler::CreateScheduleGroup eller concurrency::Scheduler::CreateScheduleGroup . Körningen använder en referensräkningsmekanism för att styra livslängden för ScheduleGroup-objekt, precis som den gör med Scheduler-objekt. När du skapar ett ScheduleGroup-objekt, sätter körningen referensräknaren till ett. Metoden concurrency::ScheduleGroup::Reference ökar referensräknaren med en. Metoden concurrency::ScheduleGroup::Release minskar referensräknaren med en.
Med många typer i Concurrency Runtime kan du associera ett objekt med en schemagrupp. Till exempel klasser som concurrency::agent och meddelandeblockklasser som concurrency::unbounded_buffer, concurrency::join, och concurrency::timer tillhandahåller överbelastade versioner av konstruktören som tar ett ScheduleGroup-objekt. Körningen använder objektet Scheduler som är associerat med det här ScheduleGroup objektet för att schemalägga aktiviteten.
Du kan också använda metoden concurrency::ScheduleGroup::ScheduleTask för att schemalägga en lätt uppgift. Mer information om lätta uppgifter finns i Lightweight Tasks (Lätta uppgifter).
Exempel
Ett exempel som använder schemagrupper för att styra körningsordningen finns i Så här använder du schemagrupper för att påverka körningsordningen.
Se även
Aktivitetsschemaläggare
Schemaläggare-tillfällen
Så här gör du: Använda schemagrupper för att påverka körordningen