Compartilhar via


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

Como: Criar um Loop de Parallel. for simples

Descreve como escrever um For loop através de qualquer array ou indexáveis IEnumerable<T> coleção de origem.

Como: Criar um Loop de Parallel simples

Descreve como escrever um ForEach um loop sobre qualquer IEnumerable<T> coleção de origem.

Como: Parar ou desvinculá-lo um Loop de Parallel

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.

Como: Cancelar uma Parallel ou um Loop ForEach

Descreve como cancelar um loop em paralelo usando umSystem.Threading.CancellationToken

Como: Acelerar a pequenos corpos de Loop

Descreve uma maneira de acelerar a execução quando o corpo do loop é muito pequeno.

Biblioteca paralela de tarefas

Fornece uma visão geral da biblioteca de tarefas paralelas.

Programação em paralela a.NET Framework

Apresenta a programação em paralela a.NET Framework.

Consulte também

Conceitos

Programação em paralela a.NET Framework