80
Parallel Programming no .NET 4.0 Jorge Paulino http://netpont o.org 14ª Reunião Presencial - 18/09/2010

Parallel Programming no .NET 4.0

Embed Size (px)

DESCRIPTION

Apresentação sobre Parallel Programming no .NET 4.0 por Jorge Paulino (MVP), no evento de aniversário da comunidade NetPonto

Citation preview

Page 1: Parallel Programming no .NET 4.0

Parallel Programming no .NET 4.0Jorge Paulino

http://netponto.org14ª Reunião Presencial - 18/09/2010

Page 2: Parallel Programming no .NET 4.0

Jorge Paulino

http://vbtuga.blogspot.comhttp://pontonetpt.com/blogs/jpaulino/default.aspxhttp://twitter.com/vbtuga

Administrador Comunidade Portugal-a-Programar

Programador VW Autoeuropa– VB.NET, .NET Framework 2.0, SQL Server, VBA– Automação Industrial (Siemens, Allen Bradley e HMI)

Microsoft Visual Basic MVP 2009, 2010

Membro de diversas comunidades como: NetPonto, PontoNetPT, MSDN, Experts-Exchange, CodeProject, etc.

Page 3: Parallel Programming no .NET 4.0

Agenda• Introdução• Novidades .NET Framework 4.0• Task Parallel Library (TPL)

– Parallel Class– Melhorias na ThreadPool– Tasks & Futures

• Parallel LINQ (PLINQ)• Data Structures for Coordination (DSC) • Ferramentas Diagnóstico

Page 4: Parallel Programming no .NET 4.0

Introdução – Evolução dos Processadores

Moore’s Law“The number of transistors incorporated in a chip will approximately double every 24 months.”

Gordon Moore, Intel Co-founder (1965)

Page 5: Parallel Programming no .NET 4.0

Introdução – Evolução dos Processadores

Moore’s Law“The number of transistors incorporated in a chip will approximately double every 24 months.”

Gordon Moore, Intel Co-founder (1965)

“Moore’s Law scaling should easily let us hit the 80-core mark in mainstream processors within the next ten years and quite possibly even less.”

Justin Rattner, Intel Vice-President and CTO (February 2007)

Page 6: Parallel Programming no .NET 4.0

Introdução – Evolução dos Processadores

Intel® Xeon® Processor 7000 (8 cores)

Pentium

386

Pentium 4

Intel CPU Trends (sources: Intel, Wikipedia, K. Olukotun)

MulticoresMultiplos núcleos idênticos num só processador

Symmetric Multiprocessors (SMP’s) Arquitectura com dois ou mais processadores idênticos ligados a uma só memória principal partilhada

Page 7: Parallel Programming no .NET 4.0

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Page 8: Parallel Programming no .NET 4.0

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Paralelismo é diferente de multithreading!

Page 9: Parallel Programming no .NET 4.0

Processo A

SEQUENCIAL

Core1

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Paralelismo é diferente de multithreading!

Page 10: Parallel Programming no .NET 4.0

Processo A

SEQUENCIAL

Core1 Processo A Processo B Processo C Processo D

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Paralelismo é diferente de multithreading!

Page 11: Parallel Programming no .NET 4.0

Processo A

SEQUENCIAL

Core1

PARALELO

Core1

Core2

Core3

Core4

Processo A

Processo B

Processo C

Processo D

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Paralelismo é diferente de multithreading!

Page 12: Parallel Programming no .NET 4.0

Processo A

SEQUENCIAL

Core1

PARALELO

Core1

Core2

Core3

Core4

Processo A

Processo B

Processo C

Processo D

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Paralelismo é diferente de multithreading!

Optimização

Page 13: Parallel Programming no .NET 4.0

• Hardware mudou ( +núcleos, -velocidade)• Utilizadores são mais exigentes• Exigências do mercado mudam• Com as Parallel Extensions é simples e fácil implementar

Introdução – Porque usar paralelismo?

Page 14: Parallel Programming no .NET 4.0

• Hardware mudou ( +núcleos, -velocidade)• Utilizadores são mais exigentes• Exigências do mercado mudam• Com as Parallel Extensions é simples e fácil implementar

Introdução – Porque usar paralelismo?

“Porque não utilizar apenas Threads ?”• Pesadas (1MB memória virtual)• Não estão optimizadas para paralelismo rápido• Difíceis de controlar/coordenar (parar, cancelar, começar

uma a seguir a outra, esperar pelo fim de várias, etc.)• Passar informação entre threads é complicado• Diagnóstico não é fácil

Page 15: Parallel Programming no .NET 4.0

Novidades .NET Framework 4.0

Parallel Class

Task ParallelismTask

Par

alle

l Lib

rary

(TPL

)

Page 16: Parallel Programming no .NET 4.0

Novidades .NET Framework 4.0

Parallel Class

Task Parallelism

PLINQ

Data Structures for Coordination (DSC)Task

Par

alle

l Lib

rary

(TPL

)

Page 17: Parallel Programming no .NET 4.0

Novidades .NET Framework 4.0

Parallel Class

Task Parallelism

PLINQ

Data Structures for Coordination (DSC)

CLR ThreadPool

Threads

Task

Par

alle

l Lib

rary

(TPL

)

Page 18: Parallel Programming no .NET 4.0

Structured Data Parallelism

Novidades .NET Framework 4.0

Parallel Class

Task Parallelism

PLINQ

Data Structures for Coordination (DSC)

CLR ThreadPool

Threads

Task

Par

alle

l Lib

rary

(TPL

)

Page 19: Parallel Programming no .NET 4.0

Conjunto de API’s disponíveis nos namespaces System.Threading e System.Threading.Tasks da .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo.

Task Parallel Library (TPL)

Page 20: Parallel Programming no .NET 4.0

Conjunto de API’s disponíveis nos namespaces System.Threading e System.Threading.Tasks da .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo.

Task Parallel Library (TPL)

Existem 2 tipos de paralelismo que podemos usar com a TPL:

Page 21: Parallel Programming no .NET 4.0

Data Parallelism

Conjunto de API’s disponíveis nos namespaces System.Threading e System.Threading.Tasks da .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo.

Task Parallel Library (TPL)

Existem 2 tipos de paralelismo que podemos usar com a TPL:

Task ParallelismParallel.For() e Parallel.ForEach() Parallel.Invoke() e Factory.Task()

Page 22: Parallel Programming no .NET 4.0

Task Parallel Library (TPL) – Data Parallelism

' Ciclo sequencialFor Each item In itemCollection Process(item) Next

VB.NET// Ciclo sequencialforeach (var item in itemCollection){ Process(item);}

C#

' Ciclo sequencialFor x As Integer = 0 To 100 Process(x) Next

VB.NET// Ciclo sequencial for (int x = 0; x < 100;x++) { Process(x);}

C#

Parallel.For (fromInclusive, toExclusive, delegate)

Parallel.ForEach(item, source, delegate)

' Ciclo paraleloParallel.For(0, 100, Sub(x) Process(x))

// Ciclo paraleloParallel.For(0, 100, x => Process (x));

' Ciclo paraleloParallel.ForEach(itemCollection, Sub(item) Process(item))

// Ciclo paraleloParallel.ForEach(itemCollection, item => Process(item));

Page 23: Parallel Programming no .NET 4.0

Task Parallel Library (TPL) - Task Parallelism

Parallel.Invoke(Action1, Action2, …)

OU

‘ Usando um Action Delegate Dim actions As Action() = {AddressOf Action1, AddressOf Action2}Parallel.Invoke(actions)

VB.NETParallel.Invoke(Action1, Action2, ...);

OU

// Usando um Action DelegateAction[] actions = new Action[] {Action1, Action2};Parallel.Invoke(actions);

C#Parallel.Invoke(…)

Task Parallel Library (TPL) – Data Parallelism• Escalabilidade• Particionamento dinâmico ou manual• Métodos para parar, cancelar, sair, etc. (12/20 overloads)

Não há no entanto garantias da ordem de execução!

Page 24: Parallel Programming no .NET 4.0

Parallel.For(), Parallel.ForEach() e Parallel.Invoke()

ParallelFor_ConsoleApplication (VB.NET) ParallelInvoke_ConsoleApplication (C#)

RayTracer (VB.NET)

demonstração

Page 25: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

Page 26: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 1

Page 27: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

WorkItem 1

WorkItem 2

Page 28: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

WorkItem 1

WorkItem 2

WorkItem 3

Page 29: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 1

WorkItem 2

WorkItem 3

Page 30: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 1 WorkItem 2

WorkItem 3

Page 31: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 1 WorkItem 2

WorkItem 4

WorkItem 3

Page 32: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 1 WorkItem 2

WorkItem 3

WorkItem 4

WorkItem 5

Page 33: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 2

WorkItem 3

WorkItem 4

WorkItem 5

Page 34: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 3 WorkItem 2

WorkItem 4

WorkItem 5

Page 35: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 3

WorkItem 4

WorkItem 5

Page 36: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 3 WorkItem 4

WorkItem 5

Page 37: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 3 WorkItem 4

WorkItem 5

WorkItem 6

Overheads• Todas as threads a aceder à Global Queue• Problemas de sincronização/locks

Page 38: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Page 39: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

Page 40: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2

Task 1

Page 41: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2

Task 1

Page 42: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

Page 43: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

Page 44: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

Task 3

Page 45: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

Task 4

Task 3

Page 46: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

Task 5

Task 4

Task 3

Page 47: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2

Task 5

Task 4

Task 3

Page 48: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2

Task 4

Task 3

Task 5

Page 49: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

…Task 4

Task 3

Task 5

Page 50: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

…Task 4

Task 3Task 5

Page 51: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

…Task 4

Task 3Task 5 Task 6

Page 52: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

…Task 4

Task 3Task 5

Task 6

Page 53: Parallel Programming no .NET 4.0

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

…Task 4

Task 3Task 5

Task 6

Optimização aproximada:• Dual-core = 2x• Quad-core = 5x

Page 54: Parallel Programming no .NET 4.0

Tasks & Futures

TaskTask é uma nova abstracção do .NET Framework 4.0 que representa unidades de trabalho assíncrono

FutureTask que retorna algum resultado

Geridos pelo .NET CLR Parallel Extensions• Automaticamente distribui as Tasks pelos CPU’s/Cores• Gere a carga de trabalho

Construídas sobre ThreadPool com gestão automática

Page 55: Parallel Programming no .NET 4.0

Tasks e FuturesTask1_ConsoleApplication (VB.NET)

Task2_WindowsFormsApplication (C#)

demonstração

Page 56: Parallel Programming no .NET 4.0

Tasks & Futures

São uma forma simples de efectuar paralelismo e permitem, ao contrário das ThreadPools.QueueUserWorkItem(), controlar o fluxo das threads e efectuar inúmeras acções como:

– Esperar– Cancelar– Continuar– Combinar– Relações (Parent – Child)– Controlar Fluxo– Tratamento de Erros (Exceptions)– Debug– …

Page 57: Parallel Programming no .NET 4.0

Parallel LINQ (PLINQ)Executa queries LINQ (LINQ to Objects) efectuando os cálculos em paralelo e está disponível no namespace System.Linq.Parallel • É declarativa (diz o que quer e não como quer)• Suporta todos os .NET Standard Query Operators• Disponível para qualquer IEnumerable<T>

Page 58: Parallel Programming no .NET 4.0

Parallel LINQ (PLINQ)Executa queries LINQ (LINQ to Objects) efectuando os cálculos em paralelo e está disponível no namespace System.Linq.Parallel • É declarativa (diz o que quer e não como quer)• Suporta todos os .NET Standard Query Operators• Disponível para qualquer IEnumerable<T>

Page 59: Parallel Programming no .NET 4.0

Parallel LINQ (PLINQ)Executa queries LINQ (LINQ to Objects) efectuando os cálculos em paralelo e está disponível no namespace System.Linq.Parallel

.AsOrdered() Preserva a ordem inicial da sequência de à entrada

• É declarativa (diz o que quer e não como quer)• Suporta todos os .NET Standard Query Operators• Disponível para qualquer IEnumerable<T>

Page 60: Parallel Programming no .NET 4.0

Parallel LINQ (PLINQ)Executa queries LINQ (LINQ to Objects) efectuando os cálculos em paralelo e está disponível no namespace System.Linq.Parallel

.AsOrdered() Preserva a ordem inicial da sequência de à entrada

.OrderBy() Faz o sort à saida

• É declarativa (diz o que quer e não como quer)• Suporta todos os .NET Standard Query Operators• Disponível para qualquer IEnumerable<T>

Page 61: Parallel Programming no .NET 4.0

Parallel LINQ (PLINQ)

ParallelEnumerable Operators• AsParallel, AsSequential, AsOrdered, AsUnordered• WithCancellation, WithDegreeOfParallelism, WithExecutionMode,

WithMergeOptions

Método ForAll()

Page 62: Parallel Programming no .NET 4.0

PLINQPLINQ (VB.NET)BabyNames(C#)

demonstração

Page 63: Parallel Programming no .NET 4.0

Coordination Data Structures

Concurrent collections• BlockingCollection<T>• ConcurrentBag<T>• ConcurrentDictionary<TKey,TValue>• ConcurrentQueue<T>• ConcurrentStack<T>• IProducerConsumerCollection<T>• Partitioner, Partitioner<T>,

OrderablePartitioner<T>

Synchronization Primitives• Barrier• CountdownEvent• ManualResetEventSlim• SemaphoreSlim• SpinLock, SpinWait

Cancellation Primitives• CancellationToken• CancellationTokenSource

Initialization Primitives• Lazy<T>, LazyInitializer• ThreadLocal<T>

Exception Handling• AggregateException

Page 64: Parallel Programming no .NET 4.0

Cancellation Model

Modelo unificado para cancelamento corporativo através de um CancellationToken e CancellationTokenSource

‘ Declaração do TokenDim cts As New CancellationTokenSourceDim ct As CancellationToken = cts.Token

VB.NET// Declaração do Tokenvar cts = new CancellationTokenSource();CancellationToken ct = cts.Token;

C#

‘ Ordem para cancelarcts.Cancel()

// Ordem para cancelarcts.Cancel();

‘ Verifica se existe ordem de cancelamentoIf cts.IsCancellationRequested Then ‘ Cancela execuçãoEnd If

// Verifica se existe ordem de cancelamentoif (cts.IsCancellationRequested) { // Cancela execução }

Existe ainda uma exception - OperationCanceledException

Page 65: Parallel Programming no .NET 4.0

CancellationTokenSourceCancellationToken_WpfApplication (C#) ParallelFor_ConsoleApplication (VB.NET)

demonstração

Page 66: Parallel Programming no .NET 4.0

AggregateException

Representa um ou mais erros que ocorrem durante a execução da aplicação

Page 67: Parallel Programming no .NET 4.0

AggregateException AggregateException (VB.NET)

demonstração

Page 68: Parallel Programming no .NET 4.0

CountdownEvent, Barrier, Partitioner

CoordinationDataStructures_ConsoleApplication (C#)ParallelFor_ConsoleApplication (VB.NET)

demonstração

Page 69: Parallel Programming no .NET 4.0

Ferramentas de Diagnóstico

Parallel Tasks WindowLista todas as tasks/threads que estão activas e o seu estado

Page 70: Parallel Programming no .NET 4.0

Ferramentas de Diagnóstico

Parallel Tasks WindowLista todas as tasks/threads que estão activas e o seu estado

Mostra as tasks/threads activas e as suas dependênciasParallel Stacks Window

Page 71: Parallel Programming no .NET 4.0

Ferramentas de Diagnóstico

Performance Analysis - Concurrency VisualizerPermitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador.

Page 72: Parallel Programming no .NET 4.0

Ferramentas de Diagnóstico

Performance Analysis - Concurrency VisualizerPermitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador.

CPU Utilization View

Visualização da utilização do CPU, indicando a utilização dos cores disponíveis

Page 73: Parallel Programming no .NET 4.0

Ferramentas de Diagnóstico

Performance Analysis - Concurrency VisualizerPermitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador.

CPU Utilization View

Visualização da utilização do CPU, indicando a utilização dos cores disponíveis

Threads View (Parallel Performance)

Mostra a evolução de cada thread ao longo da execução, incluindo call stacks (1ms)

Page 74: Parallel Programming no .NET 4.0

Ferramentas de Diagnóstico

Performance Analysis - Concurrency VisualizerPermitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador.

CPU Utilization View

Visualização da utilização do CPU, indicando a utilização dos cores disponíveis

Threads View (Parallel Performance)

Mostra a evolução de cada thread ao longo da execução, incluindo call stacks (1ms)

Cores View

Mostra a actividade por core, separando as threads em diferentes cores

Page 75: Parallel Programming no .NET 4.0

Parallel Tasks, Parallel Stacks e Performance Analysis

Debug_ConsoleApplication (VB.NET)PLINQ (VB.NET)

demonstração

Page 76: Parallel Programming no .NET 4.0

Questões?

Page 77: Parallel Programming no .NET 4.0

ReferênciasParallel Programming Developer Center

http://msdn.microsoft.com/en-us/concurrency/default.aspx

Parallel Programming with Microsoft .NEThttp://parallelpatterns.codeplex.com/

A Tour Through the Parallel Programming Samples for .NET 4http://blogs.msdn.com/b/pfxteam/archive/2009/12/09/9934811.aspx

Reactive Extensions (Rx) for .NET 3.5 SP1http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx

Using Parallel Extensions for .NET 4 in ASP.NEThttp://blogs.msdn.com/b/pfxteam/archive/2010/02/08/9960003.aspx

Page 79: Parallel Programming no .NET 4.0

Próximas reuniões presenciais

• 18/09/2010 - Setembro• 23/10/2010 - Outubro• 20/11/2010 - Novembro• 11/12/2010 - Dezembro

Reserva estes dias na agenda! :)

Page 80: Parallel Programming no .NET 4.0

Obrigado!

Jorge [email protected]

http://vbtuga.blogspot.comhttp://pontonetpt.com/blogs/jpaulino/default.aspxhttp://twitter.com/vbtuga