Parallelismo dei dati (Task Parallel Library)Data Parallelism (Task Parallel Library)

Con l'espressione parallelismo dei dati ci si riferisce a scenari in cui la stessa operazione viene eseguita contemporaneamente (ovvero in parallelo) sugli elementi di una matrice o una raccolta di origine.Data parallelism refers to scenarios in which the same operation is performed concurrently (that is, in parallel) on elements in a source collection or array. Nelle operazioni in parallelo su dati la raccolta di origine viene suddivisa in partizioni in modo che più thread possano agire simultaneamente su segmenti diversi.In data parallel operations, the source collection is partitioned so that multiple threads can operate on different segments concurrently.

La libreria Task Parallel Library (TPL) supporta il parallelismo dei dati tramite la classe System.Threading.Tasks.Parallel.The Task Parallel Library (TPL) supports data parallelism through the System.Threading.Tasks.Parallel class. Questa classe fornisce le implementazioni in parallelo basate su metodo dei cicli for e foreach (For e For Each in Visual Basic).This class provides method-based parallel implementations of for and foreach loops (For and For Each in Visual Basic). La scrittura della logica di un ciclo Parallel.For o Parallel.ForEach è molto simile a quella della logica di un ciclo sequenziale.You write the loop logic for a Parallel.For or Parallel.ForEach loop much as you would write a sequential loop. Non è necessario creare thread o accodare elementi di lavoro.You do not have to create threads or queue work items. Nei cicli di base non è necessario acquisire blocchi.In basic loops, you do not have to take locks. La libreria TPL gestisce automaticamente tutto il lavoro di basso livello.The TPL handles all the low-level work for you. Per informazioni dettagliate sull'uso di Parallel.For e Parallel.ForEach, scaricare il documento Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4 (Modelli per la programmazione parallela: informazioni sui modelli paralleli con .NET Framework 4 e su come applicarli).For in-depth information about the use of Parallel.For and Parallel.ForEach, download the document Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4. L'esempio di codice seguente mostra un ciclo foreach semplice e il relativo equivalente parallelo.The following code example shows a simple foreach loop and its parallel equivalent.

Nota

Questa documentazione usa espressioni lambda per definire delegati in TPL.This documentation uses lambda expressions to define delegates in TPL. Se non si ha familiarità con le espressioni lambda in C# o Visual Basic, vedere Espressioni lambda in PLINQ e TPL.If you are not familiar with lambda expressions in C# or Visual Basic, see Lambda Expressions in PLINQ and 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))

Quando viene eseguito un ciclo parallelo, la libreria TPL esegue il partizionamento dell'origine dati in modo che il ciclo possa agire simultaneamente su più parti.When a parallel loop runs, the TPL partitions the data source so that the loop can operate on multiple parts concurrently. L'utilità di pianificazione esegue automaticamente il partizionamento dell'attività in base alle risorse di sistema e al carico di lavoro.Behind the scenes, the Task Scheduler partitions the task based on system resources and workload. Quando risulta possibile, se si verifica uno sbilanciamento del carico di lavoro, l'utilità di pianificazione ridistribuisce il lavoro fra più thread e processori.When possible, the scheduler redistributes work among multiple threads and processors if the workload becomes unbalanced.

Nota

È anche possibile fornire un partitioner o un'utilità di pianificazione personalizzata,You can also supply your own custom partitioner or scheduler. Per altre informazioni, vedere Partitioner personalizzati per PLINQ e TPL e Utilità di pianificazione delle attività.For more information, see Custom Partitioners for PLINQ and TPL and Task Schedulers.

Sia il metodo Parallel.For sia il metodo Parallel.ForEach presentano vari overload che consentono di arrestare o interrompere l'esecuzione del ciclo, monitorare lo stato del ciclo in altri thread, gestire lo stato di thread locale, completare gli oggetti di thread locali, controllare il livello di concorrenza e così via.Both the Parallel.For and Parallel.ForEach methods have several overloads that let you stop or break loop execution, monitor the state of the loop on other threads, maintain thread-local state, finalize thread-local objects, control the degree of concurrency, and so on. I tipi di supporto che consentono di usare queste funzionalità prevedono ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationToken e CancellationTokenSource.The helper types that enable this functionality include ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationToken, and CancellationTokenSource.

Per altre informazioni, vedere il Documento contenente una panoramica dei modelli per la programmazione parallela, ovvero come comprendere e applicare modelli paralleli con .NET Framework 4.For more information, see Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4.

Il parallelismo dei dati con sintassi dichiarativa o di tipo query è supportato da PLINQ.Data parallelism with declarative, or query-like, syntax is supported by PLINQ. Per altre informazioni, vedere Parallel LINQ (PLINQ).For more information, see Parallel LINQ (PLINQ).

TitoloTitle DescrizioneDescription
Procedura: scrivere un ciclo Parallel.For sempliceHow to: Write a Simple Parallel.For Loop Descrive come scrivere un ciclo For su qualsiasi matrice o raccolta dell'origine IEnumerable<T> indicizzabile.Describes how to write a For loop over any array or indexable IEnumerable<T> source collection.
Procedura: scrivere un ciclo Parallel.ForEach sempliceHow to: Write a Simple Parallel.ForEach Loop Descrive come scrivere un ciclo ForEach su qualsiasi raccolta di origine IEnumerable<T>.Describes how to write a ForEach loop over any IEnumerable<T> source collection.
Procedura: arrestare o interrompere un ciclo Parallel.ForHow to: Stop or Break from a Parallel.For Loop Descrive come arrestare o interrompere un ciclo parallelo in modo che tutti i thread siano informati dell'azione.Describes how to stop or break from a parallel loop so that all threads are informed of the action.
Procedura: scrivere un ciclo Parallel.For con variabili di thread localiHow to: Write a Parallel.For Loop with Thread-Local Variables Descrive come scrivere un ciclo For in cui ogni thread gestisce una variabile privata che non è visibile a qualsiasi altro thread e come sincronizzare i risultati di tutti i thread quando il ciclo viene completato.Describes how to write a For loop in which each thread maintains a private variable that is not visible to any other threads, and how to synchronize the results from all threads when the loop completes.
Procedura: scrivere un ciclo Parallel.ForEach con variabili di thread localiHow to: Write a Parallel.ForEach Loop with Thread-Local Variables Descrive come scrivere un ciclo ForEach in cui ogni thread gestisce una variabile privata che non è visibile a qualsiasi altro thread e come sincronizzare i risultati di tutti i thread quando il ciclo viene completato.Describes how to write a ForEach loop in which each thread maintains a private variable that is not visible to any other threads, and how to synchronize the results from all threads when the loop completes.
Procedura: annullare un ciclo Parallel.For o ForEachHow to: Cancel a Parallel.For or ForEach Loop Descrive come annullare un ciclo parallelo tramite un oggetto System.Threading.CancellationToken.Describes how to cancel a parallel loop by using a System.Threading.CancellationToken
Procedura: aumentare la velocità di corpi di ciclo di dimensioni ridotteHow to: Speed Up Small Loop Bodies Descrive come aumentare la velocità di esecuzione nel caso di un corpo di ciclo molto piccolo.Describes one way to speed up execution when a loop body is very small.
Task Parallel Library (TPL)Task Parallel Library (TPL) Contiene la panoramica di Task Parallel Library.Provides an overview of the Task Parallel Library.
Programmazione parallelaParallel Programming Introduce la Programmazione parallela in .NET Framework.Introduces Parallel Programming in the .NET Framework.

Vedere ancheSee Also

Programmazione parallelaParallel Programming