Paralelismo de dados (biblioteca paralela de tarefas)
Paralelismo de dados refere-se a cenários em que a mesma operação é executada simultaneamente (isto é, em paralelo) nos elementos em uma coleção de origem ou matriz. Paralelismo de dados com sintaxe imperativo é suportado por várias sobrecargas da For e ForEach métodos de System.Threading.Tasks.Parallel classe. Em operações paralelas de dados, a coleção de origem é particionada para que vários threads podem operar simultaneamente em diferentes segmentos. TPL suporta o paralelismo de dados por meio de System.Threading.Tasks.Parallel classe. Essa classe fornece implementações paralelas baseadas no método de para e foreach loops (For e For Each em Visual Basic). Você escrever a lógica de loop para uma Parallel.For ou Parallel.ForEach loop quanto você escreveria um loop seqüencial. Você não precisará criar threads ou itens de trabalho na fila. Em loops básicas, não é necessário utilizar bloqueios. A TPL manipula todo o trabalho de baixo nível para você. O exemplo de código a seguir mostra um simples foreach loop e seu equivalente paralelo.
Observação
Esta documentação usa expressões lambda para definir os delegados na TPL.Se você não estiver familiarizado com as expressões lambda em C# ou Visual Basic, consulte Expressões lambda no PLINQ e TPL.
' Sequential version
For Each item In sourceCollection
Process(item)
Next
' Parallel equivalent
Parallel.ForEach(sourceCollection, Sub(item) Process(item))
// Sequential version
foreach (var item in sourceCollection)
{
Process(item);
}
// Parallel equivalent
Parallel.ForEach(sourceCollection, item => Process(item));
Quando um paralelo loop é executado, as partições TPL a fonte de dados para que o loop pode operar simultaneamente em várias partes. Nos bastidores, o Agendador de tarefas partições a tarefa com base na carga de trabalho e recursos do sistema. Quando possível, o Agendador redistribui trabalho entre vários threads e processadores, se a carga de trabalho se torna desbalanceada.
Observação
Você também pode fornecer seu próprio partitioner personalizado ou o Agendador.Para obter mais informações, consulte Partitioners personalizados para PLINQ e TPL e Agendadores de tarefa.
Tanto o Parallel.For e Parallel.ForEach métodos têm várias sobrecargas que permitem que você parar ou interromper a execução do loop, monitorar o estado de loop em outros threads, manter o estado de segmento local, finalize a objetos de segmento local, controlam o grau de simultaneidade e assim por diante. Os tipos de auxiliar habilitar essa funcionalidade incluem ParallelLoopState, ParallelOptions, e ParallelLoopResult, CancellationToken e CancellationTokenSource.
Para obter mais informações, consulte Paralelismo de dados (biblioteca paralela de tarefas).
Paralelismo de dados com a sintaxe declarativa ou de consulta semelhante, é suportado pelo PLINQ. Para obter mais informações, consulte Parallel LINQ PLINQ).
Tópicos relacionados
Título |
Descrição |
---|---|
Descreve como escrever um For loop através de qualquer array ou indexáveis IEnumerable<T> coleção de origem. |
|
Descreve como escrever um ForEach um loop sobre qualquer IEnumerable<T> coleção de origem. |
|
Descreve como parar ou quebrar a partir de um loop em paralelo, de modo que todos os threads são informados da ação. |
|
Como: Criar um Loop de Parallel tem variáveis de segmento locais |
Descreve como escrever um For loop na qual cada segmento mantém uma variável particular que não seja visível para quaisquer outros threads e como sincronizar os resultados de todos os segmentos, quando o loop é concluído. |
Como: Criar um Loop de Parallel tem variáveis de segmento locais |
Descreve como escrever um ForEach loop na qual cada segmento mantém uma variável particular que não seja visível para quaisquer outros threads e como sincronizar os resultados de todos os segmentos, quando o loop é concluído. |
Descreve como cancelar um loop em paralelo usando umSystem.Threading.CancellationToken |
|
Descreve uma maneira de acelerar a execução quando o corpo do loop é muito pequeno. |
|
Fornece uma visão geral da biblioteca de tarefas paralelas. |
|
Apresenta a programação em paralela a.NET Framework. |