SlideShare a Scribd company logo
1 of 80
http://netponto.org 14ª Reunião Presencial - 18/09/2010 Parallel Programming no .NET 4.0Jorge Paulino
Jorge Paulino Programador VW Autoeuropa ,[object Object]
Automação Industrial (Siemens, Allen Bradley e HMI)Microsoft Visual Basic MVP 2009, 2010 Administrador Comunidade Portugal-a-Programar Membro de diversas comunidades como: NetPonto, PontoNetPT, MSDN, Experts-Exchange, CodeProject, etc. http://vbtuga.blogspot.com http://pontonetpt.com/blogs/jpaulino/default.aspx http://twitter.com/vbtuga
Agenda Introdução Novidades .NET Framework 4.0 TaskParallelLibrary (TPL) ParallelClass Melhorias na ThreadPool Tasks & Futures Parallel LINQ (PLINQ) Data Structures for Coordination (DSC)  Ferramentas Diagnóstico
Introdução – Evolução dos Processadores Moore’sLaw “The number of transistors incorporated in a chip will approximately double every 24 months.” Gordon Moore, Intel Co-founder (1965)
Introdução – Evolução dos Processadores Moore’sLaw “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)
Introdução – Evolução dos Processadores Multicores Multiplos núcleos idênticos num só processador   Intel® Xeon® Processor 7000 (8 cores) Symmetric Multiprocessors (SMP’s)  Arquitectura com dois ou mais processadores idênticos  ligados  a uma só memória principal partilhada   Pentium 4   Pentium   386 Intel CPU Trends (sources: Intel, Wikipedia, K. Olukotun)
Introdução – Conceito Paralelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.
Introdução – Conceito Paralelismo 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!
Introdução – Conceito Paralelismo 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! SEQUENCIAL Processo A Core1
Introdução – Conceito Paralelismo 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! SEQUENCIAL Processo A Core1 Processo C Processo D Processo A Processo B
Introdução – Conceito Paralelismo 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! SEQUENCIAL Processo A Core1 PARALELO Core1 Processo A Core2 Processo B Core3 Processo C Core4 Processo D
Introdução – Conceito Paralelismo 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! SEQUENCIAL Optimização Processo A Core1 PARALELO Core1 Processo A Core2 Processo B Core3 Processo C Core4 Processo D
Introdução – Porque usar paralelismo? 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? Hardware mudou ( +núcleos, -velocidade) Utilizadores são mais exigentes Exigências do mercado mudam Com as Parallel Extensions é simples e fácil implementar “Porque não utilizar apenas Threads ?” ,[object Object]
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,[object Object]
Novidades .NET Framework 4.0 Parallel Class PLINQ Task Parallel Library (TPL) Task Parallelism Data Structures for Coordination (DSC)
Novidades .NET Framework 4.0 Parallel Class PLINQ Task Parallel Library (TPL) Task Parallelism Data Structures for Coordination (DSC) CLR ThreadPool Threads
Novidades .NET Framework 4.0 Structured Data Parallelism Parallel Class PLINQ Task Parallel Library (TPL) Task Parallelism Data Structures for Coordination (DSC) CLR ThreadPool Threads
TaskParallelLibrary (TPL) Conjunto de API’s disponíveis nos namespacesSystem.Threading e System.Threading.Tasksda .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo.
TaskParallelLibrary (TPL) Conjunto de API’s disponíveis nos namespacesSystem.Threading e System.Threading.Tasksda .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo. Existem 2 tipos de paralelismo que podemos usar com a TPL:
TaskParallelLibrary (TPL) Conjunto de API’s disponíveis nos namespacesSystem.Threading e System.Threading.Tasksda .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo. Existem 2 tipos de paralelismo que podemos usar com a TPL: Data Parallelism Task Parallelism Parallel.For() e Parallel.ForEach() Parallel.Invoke() e Factory.Task()
TaskParallelLibrary (TPL) – Data Parallelism Parallel.For (fromInclusive, toExclusive, delegate) ' Cicloparalelo Parallel.For(0, 100, Sub(x) Process(x)) // Cicloparalelo Parallel.For(0, 100, x => Process (x)); VB.NET C# VB.NET C# ' Ciclosequencial For Each item InitemCollection     Process(item)  Next // Ciclosequencial foreach(varitem initemCollection) {     Process(item); } ' Ciclosequencial For x As Integer = 0 To 100     Process(x)  Next // Ciclosequencial  for (int x = 0; x < 100;x++)   {		 Process(x); } Parallel.ForEach(item, source, delegate) ' Cicloparalelo Parallel.ForEach(itemCollection, Sub(item) Process(item)) // Cicloparalelo Parallel.ForEach(itemCollection, item => Process(item));
Task Parallel Library (TPL) – Data Parallelism ,[object Object]
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! TaskParallelLibrary (TPL) - Task Parallelism Parallel.Invoke(…) VB.NET C# Parallel.Invoke(Action1, Action2, …) OU ‘ Usando um Action Delegate Dim actions As Action() = {AddressOfAction1,  AddressOfAction2} Parallel.Invoke(actions) Parallel.Invoke(Action1, Action2, ...); OU // Usando um Action Delegate Action[] actions = newAction[] {Action1,                                                             Action2}; Parallel.Invoke(actions);
Parallel.For(), Parallel.ForEach() e Parallel.Invoke()ParallelFor_ConsoleApplication(VB.NET) ParallelInvoke_ConsoleApplication (C#)RayTracer (VB.NET) demonstração
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkerThread 1 WorkerThread 2 … Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkerThread 1 WorkerThread 2 … WorkItem 1 Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 1 WorkerThread 1 WorkerThread 2 … WorkItem2 Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 1 WorkItem2 WorkerThread 1 WorkerThread 2 … WorkItem 3 Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem2 WorkerThread 1 WorkerThread 2 … WorkItem 3 WorkItem 1 Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkerThread 1 WorkerThread 2 … WorkItem 3 WorkItem 1 WorkItem2 Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem3 WorkerThread 1 WorkerThread 2 … WorkItem4 WorkItem 1 WorkItem2 Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem3 WorkItem4 WorkerThread 1 WorkerThread 2 … WorkItem5 WorkItem 1 WorkItem2 Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem3 WorkItem4 WorkerThread 1 WorkerThread 2 … WorkItem5 WorkItem2 Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem4 WorkItem5 WorkerThread 1 WorkerThread 2 … WorkItem3 WorkItem2 Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem4 WorkItem5 WorkerThread 1 WorkerThread 2 … WorkItem3 Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 5 WorkerThread 1 WorkerThread 2 … WorkItem3 WorkItem4 Program Thread
ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 5 WorkItem6 WorkerThread 1 WorkerThread 2 … WorkItem3 WorkItem4 Program Thread  Overheads Todas as threads a aceder à Global Queue Problemas de sincronização/locks
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 … Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 … Program Thread  Task 2 Task 1
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … Task 1 WorkerThread 1 WorkerThread 2 … Program Thread  Task 2
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … Task 1 WorkerThread 1 WorkerThread 2 Task 2 … Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 Task 2 … Task 1 Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 Task 4 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Task 3 Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 5 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Task 3 Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 5 … WorkerThread 1 WorkerThread 2 … Task 2 Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 Task 4 … WorkerThread 1 WorkerThread 2 … Task 2 Task 5 Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 Task 4 … WorkerThread 1 WorkerThread 2 … Task 5 Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 … WorkerThread 1 WorkerThread 2 … Task 5 Task 3 Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 … WorkerThread 1 WorkerThread 2 … Task 6 Task 5 Task 3 Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 6 … WorkerThread 1 WorkerThread 2 … Task 5 Task 3 Program Thread
ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 6 … WorkerThread 1 WorkerThread 2 … Task 5 Task 3 Program Thread  Optimização aproximada: Dual-core = 2x Quad-core = 5x
Tasks & Futures Task Task é uma nova abstracção do .NET Framework 4.0 que representa unidades de trabalho assíncrono Future Task que retorna algum resultado Geridos pelo .NET CLR ParallelExtensions Automaticamente distribui as Tasks pelos CPU’s/Cores Gere a carga de trabalho Construídas sobre ThreadPool com gestão automática
Tasks e FuturesTask1_ConsoleApplication (VB.NET)Task2_WindowsFormsApplication (C#) demonstração
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: ,[object Object]
Cancelar
Continuar
Combinar
Relações (Parent – Child)
ControlarFluxo
Tratamento de Erros (Exceptions)
Debug
 …,[object Object]
Suporta todos os .NET Standard QueryOperators
Disponível para qualquer IEnumerable<T>,[object Object]
Suporta todos os .NET Standard QueryOperators
Disponível para qualquer IEnumerable<T>,[object Object]
Suporta todos os .NET Standard QueryOperators
Disponível para qualquer IEnumerable<T>.AsOrdered()  Preserva a ordem inicial da sequência de à entrada
Parallel LINQ (PLINQ) Executa queries LINQ (LINQ to Objects) efectuando os cálculos em paraleloe está disponível no namespaceSystem.Linq.Parallel ,[object Object]
Suporta todos os .NET Standard QueryOperators
Disponível para qualquer IEnumerable<T>.AsOrdered()  Preserva a ordem inicial da sequência de à entrada .OrderBy()  Faz o sort à saida
Parallel LINQ (PLINQ) ParallelEnumerable Operators ,[object Object]

More Related Content

Similar to Parallel Programming no .NET 4.0

Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia J Chaves Silva
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!Intel Software Brasil
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!Luciano Palma
 
ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!Vinicius Mussak
 
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...JP Clementi
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF CoreExplorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF CoreRogério Moraes de Carvalho
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a AspectosRicardo Terra
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Charles Fortes
 
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005Comunidade CanalSharePoint
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014MySQL Brasil
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4CDS
 
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al....NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...Renato Groff
 

Similar to Parallel Programming no .NET 4.0 (20)

Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!
 
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
 
De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF CoreExplorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
 
Middlewares ASP.NET
Middlewares ASP.NETMiddlewares ASP.NET
Middlewares ASP.NET
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0
 
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005
Trabalhando com ambientes complexos – SharePoint 2007 e SQL Server 2005
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014Novidades do Universo MySQL Maio 2014
Novidades do Universo MySQL Maio 2014
 
Mrtg
MrtgMrtg
Mrtg
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4
 
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al....NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...
.NET Core 3.0 e ASP.NET Core 3.0 : principais novidades - TDC 2019 - Porto Al...
 

More from Comunidade NetPonto

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Comunidade NetPonto
 
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Comunidade NetPonto
 
MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaComunidade NetPonto
 
Deep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaDeep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaComunidade NetPonto
 
The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloComunidade NetPonto
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazComunidade NetPonto
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João JesusComunidade NetPonto
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComunidade NetPonto
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsComunidade NetPonto
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpComunidade NetPonto
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosComunidade NetPonto
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoComunidade NetPonto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realComunidade NetPonto
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteComunidade NetPonto
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIComunidade NetPonto
 

More from Comunidade NetPonto (20)

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
 
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
 
MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara Silva
 
Deep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaDeep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo Costa
 
The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno Cancelo
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
ASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco GodoiASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco Godoi
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor Tomaz
 
HTML5 - Pedro Rosa
HTML5 - Pedro RosaHTML5 - Pedro Rosa
HTML5 - Pedro Rosa
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João Jesus
 
OData – Super Cola W3
OData – Super Cola W3OData – Super Cola W3
OData – Super Cola W3
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharp
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes Unitários
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de Projecto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 

Parallel Programming no .NET 4.0

  • 1. http://netponto.org 14ª Reunião Presencial - 18/09/2010 Parallel Programming no .NET 4.0Jorge Paulino
  • 2.
  • 3. Automação Industrial (Siemens, Allen Bradley e HMI)Microsoft Visual Basic MVP 2009, 2010 Administrador Comunidade Portugal-a-Programar Membro de diversas comunidades como: NetPonto, PontoNetPT, MSDN, Experts-Exchange, CodeProject, etc. http://vbtuga.blogspot.com http://pontonetpt.com/blogs/jpaulino/default.aspx http://twitter.com/vbtuga
  • 4. Agenda Introdução Novidades .NET Framework 4.0 TaskParallelLibrary (TPL) ParallelClass Melhorias na ThreadPool Tasks & Futures Parallel LINQ (PLINQ) Data Structures for Coordination (DSC) Ferramentas Diagnóstico
  • 5. Introdução – Evolução dos Processadores Moore’sLaw “The number of transistors incorporated in a chip will approximately double every 24 months.” Gordon Moore, Intel Co-founder (1965)
  • 6. Introdução – Evolução dos Processadores Moore’sLaw “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)
  • 7. Introdução – Evolução dos Processadores Multicores Multiplos núcleos idênticos num só processador Intel® Xeon® Processor 7000 (8 cores) Symmetric Multiprocessors (SMP’s) Arquitectura com dois ou mais processadores idênticos ligados a uma só memória principal partilhada Pentium 4 Pentium 386 Intel CPU Trends (sources: Intel, Wikipedia, K. Olukotun)
  • 8. Introdução – Conceito Paralelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.
  • 9. Introdução – Conceito Paralelismo 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!
  • 10. Introdução – Conceito Paralelismo 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! SEQUENCIAL Processo A Core1
  • 11. Introdução – Conceito Paralelismo 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! SEQUENCIAL Processo A Core1 Processo C Processo D Processo A Processo B
  • 12. Introdução – Conceito Paralelismo 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! SEQUENCIAL Processo A Core1 PARALELO Core1 Processo A Core2 Processo B Core3 Processo C Core4 Processo D
  • 13. Introdução – Conceito Paralelismo 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! SEQUENCIAL Optimização Processo A Core1 PARALELO Core1 Processo A Core2 Processo B Core3 Processo C Core4 Processo D
  • 14. Introdução – Porque usar paralelismo? Hardware mudou ( +núcleos, -velocidade) Utilizadores são mais exigentes Exigências do mercado mudam Com as Parallel Extensions é simples e fácil implementar
  • 15.
  • 16. Não estão optimizadas para paralelismo rápido
  • 17. Difíceis de controlar/coordenar (parar, cancelar, começar uma a seguir a outra, esperar pelo fim de várias, etc.)
  • 18. Passar informação entre threads é complicado
  • 19.
  • 20. Novidades .NET Framework 4.0 Parallel Class PLINQ Task Parallel Library (TPL) Task Parallelism Data Structures for Coordination (DSC)
  • 21. Novidades .NET Framework 4.0 Parallel Class PLINQ Task Parallel Library (TPL) Task Parallelism Data Structures for Coordination (DSC) CLR ThreadPool Threads
  • 22. Novidades .NET Framework 4.0 Structured Data Parallelism Parallel Class PLINQ Task Parallel Library (TPL) Task Parallelism Data Structures for Coordination (DSC) CLR ThreadPool Threads
  • 23. TaskParallelLibrary (TPL) Conjunto de API’s disponíveis nos namespacesSystem.Threading e System.Threading.Tasksda .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo.
  • 24. TaskParallelLibrary (TPL) Conjunto de API’s disponíveis nos namespacesSystem.Threading e System.Threading.Tasksda .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo. Existem 2 tipos de paralelismo que podemos usar com a TPL:
  • 25. TaskParallelLibrary (TPL) Conjunto de API’s disponíveis nos namespacesSystem.Threading e System.Threading.Tasksda .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo. Existem 2 tipos de paralelismo que podemos usar com a TPL: Data Parallelism Task Parallelism Parallel.For() e Parallel.ForEach() Parallel.Invoke() e Factory.Task()
  • 26. TaskParallelLibrary (TPL) – Data Parallelism Parallel.For (fromInclusive, toExclusive, delegate) ' Cicloparalelo Parallel.For(0, 100, Sub(x) Process(x)) // Cicloparalelo Parallel.For(0, 100, x => Process (x)); VB.NET C# VB.NET C# ' Ciclosequencial For Each item InitemCollection Process(item) Next // Ciclosequencial foreach(varitem initemCollection) { Process(item); } ' Ciclosequencial For x As Integer = 0 To 100 Process(x) Next // Ciclosequencial for (int x = 0; x < 100;x++) { Process(x); } Parallel.ForEach(item, source, delegate) ' Cicloparalelo Parallel.ForEach(itemCollection, Sub(item) Process(item)) // Cicloparalelo Parallel.ForEach(itemCollection, item => Process(item));
  • 27.
  • 29. Métodos para parar, cancelar, sair, etc. (12/20 overloads)Não há no entanto garantias da ordem de execução! TaskParallelLibrary (TPL) - Task Parallelism Parallel.Invoke(…) VB.NET C# Parallel.Invoke(Action1, Action2, …) OU ‘ Usando um Action Delegate Dim actions As Action() = {AddressOfAction1, AddressOfAction2} Parallel.Invoke(actions) Parallel.Invoke(Action1, Action2, ...); OU // Usando um Action Delegate Action[] actions = newAction[] {Action1, Action2}; Parallel.Invoke(actions);
  • 30. Parallel.For(), Parallel.ForEach() e Parallel.Invoke()ParallelFor_ConsoleApplication(VB.NET) ParallelInvoke_ConsoleApplication (C#)RayTracer (VB.NET) demonstração
  • 31. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkerThread 1 WorkerThread 2 … Program Thread
  • 32. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkerThread 1 WorkerThread 2 … WorkItem 1 Program Thread
  • 33. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 1 WorkerThread 1 WorkerThread 2 … WorkItem2 Program Thread
  • 34. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 1 WorkItem2 WorkerThread 1 WorkerThread 2 … WorkItem 3 Program Thread
  • 35. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem2 WorkerThread 1 WorkerThread 2 … WorkItem 3 WorkItem 1 Program Thread
  • 36. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkerThread 1 WorkerThread 2 … WorkItem 3 WorkItem 1 WorkItem2 Program Thread
  • 37. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem3 WorkerThread 1 WorkerThread 2 … WorkItem4 WorkItem 1 WorkItem2 Program Thread
  • 38. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem3 WorkItem4 WorkerThread 1 WorkerThread 2 … WorkItem5 WorkItem 1 WorkItem2 Program Thread
  • 39. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem3 WorkItem4 WorkerThread 1 WorkerThread 2 … WorkItem5 WorkItem2 Program Thread
  • 40. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem4 WorkItem5 WorkerThread 1 WorkerThread 2 … WorkItem3 WorkItem2 Program Thread
  • 41. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem4 WorkItem5 WorkerThread 1 WorkerThread 2 … WorkItem3 Program Thread
  • 42. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 5 WorkerThread 1 WorkerThread 2 … WorkItem3 WorkItem4 Program Thread
  • 43. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 5 WorkItem6 WorkerThread 1 WorkerThread 2 … WorkItem3 WorkItem4 Program Thread Overheads Todas as threads a aceder à Global Queue Problemas de sincronização/locks
  • 44. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 … Program Thread
  • 45. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 … Program Thread Task 2 Task 1
  • 46. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … Task 1 WorkerThread 1 WorkerThread 2 … Program Thread Task 2
  • 47. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … Task 1 WorkerThread 1 WorkerThread 2 Task 2 … Program Thread
  • 48. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 Task 2 … Task 1 Program Thread
  • 49. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
  • 50. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
  • 51. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 Task 4 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
  • 52. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Task 3 Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 5 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
  • 53. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Task 3 Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 5 … WorkerThread 1 WorkerThread 2 … Task 2 Program Thread
  • 54. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 Task 4 … WorkerThread 1 WorkerThread 2 … Task 2 Task 5 Program Thread
  • 55. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 Task 4 … WorkerThread 1 WorkerThread 2 … Task 5 Program Thread
  • 56. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 … WorkerThread 1 WorkerThread 2 … Task 5 Task 3 Program Thread
  • 57. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 … WorkerThread 1 WorkerThread 2 … Task 6 Task 5 Task 3 Program Thread
  • 58. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 6 … WorkerThread 1 WorkerThread 2 … Task 5 Task 3 Program Thread
  • 59. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 6 … WorkerThread 1 WorkerThread 2 … Task 5 Task 3 Program Thread Optimização aproximada: Dual-core = 2x Quad-core = 5x
  • 60. Tasks & Futures Task Task é uma nova abstracção do .NET Framework 4.0 que representa unidades de trabalho assíncrono Future Task que retorna algum resultado Geridos pelo .NET CLR ParallelExtensions Automaticamente distribui as Tasks pelos CPU’s/Cores Gere a carga de trabalho Construídas sobre ThreadPool com gestão automática
  • 61. Tasks e FuturesTask1_ConsoleApplication (VB.NET)Task2_WindowsFormsApplication (C#) demonstração
  • 62.
  • 68. Tratamento de Erros (Exceptions)
  • 69. Debug
  • 70.
  • 71. Suporta todos os .NET Standard QueryOperators
  • 72.
  • 73. Suporta todos os .NET Standard QueryOperators
  • 74.
  • 75. Suporta todos os .NET Standard QueryOperators
  • 76. Disponível para qualquer IEnumerable<T>.AsOrdered() Preserva a ordem inicial da sequência de à entrada
  • 77.
  • 78. Suporta todos os .NET Standard QueryOperators
  • 79. Disponível para qualquer IEnumerable<T>.AsOrdered() Preserva a ordem inicial da sequência de à entrada .OrderBy() Faz o sort à saida
  • 80.
  • 83.
  • 94.
  • 97.
  • 99. AggregateException Representa um ou mais erros que ocorrem durante a execução da aplicação
  • 101. CountdownEvent, Barrier, PartitionerCoordinationDataStructures_ConsoleApplication (C#)ParallelFor_ConsoleApplication (VB.NET) demonstração
  • 102. Ferramentas de Diagnóstico Parallel Tasks Window Listatodas as tasks/threads queestãoactivas e o seuestado
  • 103. Ferramentas de Diagnóstico Parallel Tasks Window Listatodas as tasks/threads queestãoactivas e o seuestado Parallel Stacks Window Mostra as tasks/threads activas e as suasdependências
  • 104. Ferramentas de Diagnóstico Performance Analysis - Concurrency Visualizer Permitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador.
  • 105. Ferramentas de Diagnóstico Performance Analysis - Concurrency Visualizer Permitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador. CPU UtilizationView Visualização da utilização do CPU, indicando a utilização dos cores disponíveis
  • 106. Ferramentas de Diagnóstico Performance Analysis - Concurrency Visualizer Permitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador. CPU UtilizationView Visualização da utilização do CPU, indicando a utilização dos cores disponíveis ThreadsView (Parallel Performance) Mostra a evolução de cada thread ao longo da execução, incluindo callstacks(1ms)
  • 107. Ferramentas de Diagnóstico Performance Analysis - Concurrency Visualizer Permitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador. CPU UtilizationView Visualização da utilização do CPU, indicando a utilização dos cores disponíveis ThreadsView (Parallel Performance) Mostra a evolução de cada thread ao longo da execução, incluindo callstacks(1ms) Cores View Mostra a actividade por core, separando as threadsem diferentes cores
  • 108. Parallel Tasks, Parallel Stacks e Performance Analysis Debug_ConsoleApplication (VB.NET)PLINQ (VB.NET) demonstração
  • 110. Referências ParallelProgrammingDeveloperCenter http://msdn.microsoft.com/en-us/concurrency/default.aspx ParallelProgrammingwith Microsoft .NET http://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.5SP1 http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx Using Parallel Extensions for .NET 4 in ASP.NET http://blogs.msdn.com/b/pfxteam/archive/2010/02/08/9960003.aspx
  • 112. Próximas reuniões presenciais 18/09/2010 - Setembro 23/10/2010 - Outubro 20/11/2010 - Novembro 11/12/2010 - DezembroReserva estes dias na agenda! :)
  • 113. Obrigado! Jorge Paulino jorgemiguel.paulino@gmail.com http://vbtuga.blogspot.com http://pontonetpt.com/blogs/jpaulino/default.aspx http://twitter.com/vbtuga