parallel programming no .net 4.0

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

Upload: comunidade-netponto

Post on 06-May-2015

1.742 views

Category:

Technology


8 download

DESCRIPTION

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

TRANSCRIPT

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