Share via


Gegevensparallellisme (taakparallelbibliotheek)

Gegevensparallellisme verwijst naar scenario's waarin dezelfde bewerking gelijktijdig wordt uitgevoerd (dat wil gezegd, parallel) op elementen in een bronverzameling of matrix. In parallelle gegevensbewerkingen wordt de bronverzameling gepartitioneerd, zodat meerdere threads gelijktijdig op verschillende segmenten kunnen worden uitgevoerd.

De Task Parallel Library (TPL) ondersteunt gegevensparallelisme via de System.Threading.Tasks.Parallel klasse. Deze klasse biedt parallelle implementaties op basis van methoden voor en foreach-lussen (Foren For Each in Visual Basic). U schrijft de luslogica voor een Parallel.For of Parallel.ForEach lus net zoals u een sequentiële lus zou schrijven. U hoeft geen threads of werkitems in de wachtrij te maken. In basislussen hoeft u geen vergrendelingen te nemen. De TPL verwerkt al het werk op laag niveau voor u. Download voor uitgebreide informatie over het gebruik van Parallel.For en Parallel.ForEachdownload het document Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4. In het volgende codevoorbeeld ziet u een eenvoudige foreach lus en het bijbehorende parallelle equivalent.

Notitie

In deze documentatie worden lambda-expressies gebruikt om gedelegeerden in TPL te definiëren. Als u niet bekend bent met lambda-expressies in C# of Visual Basic, raadpleegt u Lambda-expressies in PLINQ en 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))

Wanneer een parallelle lus wordt uitgevoerd, partitioneert de TPL de gegevensbron, zodat de lus gelijktijdig op meerdere onderdelen kan worden uitgevoerd. Achter de schermen partitioneert task scheduler de taak op basis van systeemresources en workload. Indien mogelijk wordt de scheduler werk herdistribueert tussen meerdere threads en processors als de workload niet meer in balans is.

Notitie

U kunt ook uw eigen aangepaste partitioner of planner opgeven. Zie Aangepaste partitioneerfuncties voor PLINQ en TPL en Taakplanners voor meer informatie.

Zowel de als Parallel.ForEach de Parallel.For methoden hebben verschillende overbelastingen waarmee u de uitvoering van een lus kunt stoppen of verbreken, de status van de lus op andere threads kunt bewaken, de status van thread-local kunt onderhouden, thread-lokale objecten kunt voltooien, de mate van gelijktijdigheid kunt beheren, enzovoort. De helpertypen die deze functionaliteit mogelijk maken, zijn onder andere ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationTokenen CancellationTokenSource.

Zie Patronen voor parallelle programmering: Inzicht in en toepassen van parallelle patronen met .NET Framework 4 voor meer informatie.

Gegevensparallelisme met declaratieve of query-achtige syntaxis wordt ondersteund door PLINQ. Zie Parallel LINQ (PLINQ) voor meer informatie.

Title Beschrijving
Procedure: Een eenvoudige parallelle.for-lus schrijven Beschrijft hoe u een lus over een For matrix of indexeerbare IEnumerable<T> bronverzameling schrijft.
Procedure: Een eenvoudige parallelle.ForEach-lus schrijven Beschrijft hoe u een lus over een ForEachIEnumerable<T> bronverzameling schrijft.
Procedure: Stoppen of onderbreken van een parallel.for-lus Hierin wordt beschreven hoe u een parallelle lus stopt of onderbreekt, zodat alle threads worden geïnformeerd over de actie.
Procedure: Een parallelle.for-lus schrijven met thread-lokale variabelen Beschrijft hoe u een For lus schrijft waarin elke thread een privévariabele onderhoudt die niet zichtbaar is voor andere threads en hoe u de resultaten van alle threads synchroniseert wanneer de lus is voltooid.
Procedure: Een Parallel.ForEach-lus schrijven met partitie-lokale variabelen Beschrijft hoe u een ForEach lus schrijft waarin elke thread een privévariabele onderhoudt die niet zichtbaar is voor andere threads en hoe u de resultaten van alle threads synchroniseert wanneer de lus is voltooid.
Procedure: Een parallel.for- of ForEach-lus annuleren Beschrijft hoe u een parallelle lus annuleert met behulp van een System.Threading.CancellationToken
Procedure: Kleine lusteksten versnellen Beschrijft één manier om de uitvoering te versnellen wanneer een lustekst erg klein is.
Taakparallelbibliotheek (TPL) Biedt een overzicht van de taakparallelbibliotheek.
Parallel programmeren Introduceert parallelle programmering in .NET Framework.

Zie ook