Falando sobre Paralelismo e .NET 4.0

Olá pessoal, tudo certo?

Semana passada, estive conversando com um arquiteto que como eu, passou pelos tempos dos semáforos, critical sessions, interrupções, pool de conexões, hash tables manuais, listas ligadas, mutex, etc., que muito desafiavam os desenvolvedores, mas também ofereciam momentos agradáveis de satisfação (principalmente quando rodava tudo em produção, com grandes volumes e alto desempenho, certo Judice? :)

Um dos assuntos que falamos foi sobre paralelismo e como o .NET 4.0 oferece novas opções para a programação paralela. É o que temos com o Parallel Extensions for .NET 4.0.  

A arquitetura do .NET 4.0 para paralelismo é dada abaixo:

image

No desenho acima, encontramos o PLINQ (Parallel LINQ), o TPL (Task Parallel Library), o DSC (Data Structures and Coordination) além dos recursos para suporte a múltiplos cores para o processamento paralelo. Além de estruturas como Parallel.For, Parallel.Foreach, Parallelenumerable.Forall, etc, coleções tratadas via PLINQ oferecem um particionamento que permite o tratamento em múltiplos cores, oferecendo paralelismo e desempenho para cenários diversos.

O assunto é extenso e se você ficou interessado com o Parallel Extensions for .NET 4.0, não deixe de conferir o documento abaixo:

Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4
Ref.: https://www.microsoft.com/downloads/details.aspx?FamilyID=86b3d32b-ad26-4bb8-a3ae-c1637026c3ee&displaylang=en

Nem preciso dizer que é “LEITURA OBRIGATÓRIA!”, ou preciso? :)

Se estiver procurando alguns exemplos interessantes, veja ainda:

Samples for Parallel Programming with the .NET Framework 4
Ref.: https://code.msdn.microsoft.com/ParExtSamples

Finalmente, o portal de Computação Paralela da Microsoft é esse:

Parallel Computing
Ref.: https://msdn.microsoft.com/en-us/concurrency/default.aspx

Outro assunto interessante que surgiu foi sobre o futuro do paralelismo e as pesquisas em torno de programação paralela que a Microsoft Research está conduzindo com o DraydLINQ. Já falamos desse framework por aqui no blog, veja:

Programação Paralela com DryadLINQ
Ref.: https://blogs.msdn.com/wcamb/archive/2009/09/21/programa-o-paralela-com-dryadlinq.aspx

Esse framework oferece recursos de programação para cenários sofisticados, como processamento de imagens, análises gráficas, simulações, mining de dados e outros exemplos de processamento intenso de dados. Um dos objetivos do projeto é facilitar o desenvolvimento paralelo para cenários do dia-a-dia.

Veja um diagrama de arquitetura prevista para o DryadLINQ:

image 

Baseado em HPC High Performance Computing, o Dryad oferece ainda maior poder de processamento e paralelismo para cenários bem sofisticados.

Para saber mais sobre essa iniciativa, confira os links abaixo:

DryadLINQ
Ref.: https://research.microsoft.com/en-us/projects/DryadLINQ/

DryadLINQ: A System for General-Purpose Distributed Data-Parallel
Computing Using a High-Level Language

Ref.: https://research.microsoft.com/en-us/projects/dryadlinq/dryadlinq.pdf

Scaling out PLINQ: DryadLINQ at PDC09 and Supercomputing09
Ref.: https://blogs.msdn.com/pfxteam/archive/2009/11/11/9921066.aspx

Data-Intensive Computing on Windows HPC Server with the DryadLINQ Framework
Ref.: https://microsoftpdc.com/Sessions/SVR17

E para terminar, não perca o WebCast sobre dicas e truques sobre Paralelismo, que o Otávio já está preparando…. Veja o link a seguir e garanta sua vaga… :)

Webcast Arquitetura: Paralelismo: dicas e truques para um arquiteto 
Ref.: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032450897&Culture=pt-BR

Não foi um post tutorial, foi mais um post de referências. Em breve, vamos falar mais sobre paralelismo no .NET 4.0 de forma mais didática e com exemplos. Aguarde!

Por enquanto é só! Até o próximo post :)

Waldemir.