Dataparallellitet (aktivitetsparallellt bibliotek)

Dataparallellitet avser scenarier där samma åtgärd utförs samtidigt (dvs. parallellt) på element i en källsamling eller matris. Vid parallella dataåtgärder partitioneras källsamlingen så att flera trådar kan köras på olika segment samtidigt.

Det parallella aktivitetsbiblioteket (TPL) stöder dataparallellitet via System.Threading.Tasks.Parallel klassen. Den här klassen tillhandahåller metodbaserade parallella implementeringar av for - och foreach-loopar (For och For Each i Visual Basic). Du skriver looplogik för en Parallel.For eller Parallel.ForEach -loop ungefär som du skulle skriva en sekventiell loop. Du behöver inte skapa trådar eller köarbetsobjekt. I grundläggande loopar behöver du inte ta lås. TPL hanterar allt arbete på låg nivå åt dig. Om du vill ha detaljerad information om användningen av Parallel.For och Parallel.ForEachladdar du ned dokumentet Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4 (Mönster för parallell programmering: Förstå och tillämpa parallella mönster med .NET Framework 4). I följande kodexempel visas en enkel foreach loop och dess parallella motsvarighet.

Kommentar

Den här dokumentationen använder lambda-uttryck för att definiera ombud i TPL. Om du inte är bekant med lambda-uttryck i C# eller Visual Basic kan du läsa Lambda-uttryck i PLINQ och TPL.

// Sequential version
foreach (var item in sourceCollection)
{
    Process(item);
}

// Parallel equivalent
Parallel.ForEach(sourceCollection, item => Process(item));
' Sequential version        
For Each item In sourceCollection
    Process(item)
Next

' Parallel equivalent
Parallel.ForEach(sourceCollection, Sub(item) Process(item))

När en parallell loop körs partitioneras datakällan av TPL så att loopen kan köras på flera delar samtidigt. I bakgrunden partitioneras aktiviteten baserat på systemresurser och arbetsbelastningar i Schemaläggaren. När det är möjligt distribuerar schemaläggaren om arbete mellan flera trådar och processorer om arbetsbelastningen blir obalanserad.

Kommentar

Du kan också ange en egen anpassad partitionerare eller schemaläggare. Mer information finns i Anpassade partitionerare för PLINQ och TPL och schemaläggare för uppgifter.

Parallel.For Både metoderna och Parallel.ForEach har flera överlagringar som gör att du kan stoppa eller bryta loopkörningen, övervaka loopens tillstånd på andra trådar, underhålla trådlokalt tillstånd, slutföra trådlokala objekt, kontrollera graden av samtidighet och så vidare. De hjälptyper som aktiverar den här funktionen är ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationTokenoch CancellationTokenSource.

Mer information finns i Mönster för parallell programmering: Förstå och tillämpa parallella mönster med .NET Framework 4.

Dataparallellitet med deklarativ eller frågeliknande syntax stöds av PLINQ. Mer information finns i Parallell LINQ (PLINQ).

Title Description
Gör så här: Skriva en enkel parallell.For-loop Beskriver hur du skriver en For loop över valfri matris eller indexerbar IEnumerable<T> källsamling.
Gör så här: Skriva en enkel Parallel.ForEach-loop Beskriver hur du skriver en ForEach loop över alla IEnumerable<T> källsamlingar.
Anvisningar: Stoppa eller bryta från en parallell.For-loop Beskriver hur du stoppar eller bryter från en parallell loop så att alla trådar informeras om åtgärden.
Gör så här: Skriva en parallell.For-loop med trådlokala variabler Beskriver hur du skriver en For loop där varje tråd har en privat variabel som inte är synlig för andra trådar och hur du synkroniserar resultatet från alla trådar när loopen är klar.
Anvisningar: Skriva en Parallel.ForEach-loop med partitionslokala variabler Beskriver hur du skriver en ForEach loop där varje tråd har en privat variabel som inte är synlig för andra trådar och hur du synkroniserar resultatet från alla trådar när loopen är klar.
Gör så här: Avbryt en Parallel.For- eller ForEach-loop Beskriver hur du avbryter en parallell loop med hjälp av en System.Threading.CancellationToken
Gör så här: Snabba upp små loopkroppar Beskriver ett sätt att påskynda körningen när en loop-brödtext är mycket liten.
Aktivitetsparallellt bibliotek (TPL) Ger en översikt över det parallella aktivitetsbiblioteket.
Parallell programmering Introducerar parallell programmering i .NET Framework.

Se även