Paralelismo com C#
Aprendar trabalhar com processamento paralelo em C#.
E ai pessoal beleza, atualmente ando meio afastado do blog, mas sempre que pintar um tempinho eu prometo trazer novos artigos para vocês.
Hoje resolvi escrever um post sobre processamento paralelo.
Irei criar um simples programa onde eu consigo executar um mesmo trecho de código em mais de um núcleo do processador de forma paralela.
Bom então vamos por a mão na massa!
Bom para isso criei um projeto Application Console como podemos ver abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
using System; using System.Diagnostics; using System.Threading.Tasks; namespace Paralelismo { class Program { static void Main(string[] args) { try { int qtde = 1000000; string tempoProcessamentoNormal = ProcessamentoNormal(qtde); string tempoProcessamentoParalelo = ProcessamentoParalelo(qtde); Console.WriteLine("Tempo processamento paralelo " + tempoProcessamentoParalelo); Console.WriteLine("Tempo processamento normal " + tempoProcessamentoNormal); Console.ReadKey(); } catch (Exception e) { Console.WriteLine("Exception: " + e.Message); } } private static string ProcessamentoParalelo(int qtde) { Stopwatch sw = new Stopwatch(); sw.Start(); Parallel.For(0, qtde, index => { Console.WriteLine("Escrevendo a linha " + index.ToString()); }); sw.Stop(); return sw.Elapsed.ToString(); } private static string ProcessamentoNormal(int qtde) { Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < qtde; i++) { Console.WriteLine("Escrevendo a linha " + i.ToString()); } sw.Stop(); return sw.Elapsed.ToString(); } } } |
Explicando o código acima:
Temos 2 métodos principais o ProcessamentoNormal e ProcessamentoParalelo.
Cada método executa um loop de forma diferente, no caso do ProcessamentoNormal é feito um For tradicional exibindo uma quantidade X de linhas na tela.
1 2 3 4 |
for (int i = 0; i < qtde; i++) { Console.WriteLine("Escrevendo a linha " + i.ToString()); } |
Já o método ProcessamentoParalelo executa um For de uma forma um pouco diferente, como podemos ver abaixo ele usa a classe Parallel.
1 2 3 |
Parallel.For(0, qtde, index => { Console.WriteLine("Escrevendo a linha " + index.ToString()); }); |
Abaixo podemos conferir o resultado do processamento em mais de um núcleo.
Repare que o processamento da CPU chega a 100%, com isso temos que ter cuidado ao utilizar esse tipo de recurso.
Executar algo em paralelo sem ter controle de número de threads abertas podem ocasionar vários tipos de problemas, pode por exemplo estourar o pool de conexão do banco de dados, ou ter problemas com acesso a um arquivo no disco e etc.
Outro ponto que devemos levar em consideração é o tipo de coisa que vai ser processado, pois se for algo muito pesado você pode ter um ganho de performance nesse tipo de processamento, mas no caso do nosso exemplo a execução em paralelo como só exibe linhas na tela, pode ser mais demorado do que um simples for normal, pois iniciar esse processo em paralelo é bem custoso.
Bom espero que tenham curtido o post.
Até a próxima!
About author
You might also like
Aprenda a construir aplicações em Ionic 4 de uma forma simples e rápida – Atualizado!
Share this on WhatsAppAntes mesmo do Ionic 4 ser lançado, o professor Paulo antecipa as novidades. Veja também a análise de outros frameworks para você escolher qual a melhor solução para
Como FAZER meu APLICATIVO em Ionic FALAR?
Share this on WhatsAppNo artigo de hoje irei ensinar um recurso bastante interessante que vejo poucas pessoas utilizando hoje em dia, nós iremos aprender fazer nosso aplicativo falar com o
Curso grátis de Ionic 3 em português
Share this on WhatsAppFala galera, hoje resolvi dar inicio a uma série de vídeos sobre Ionic 3. Para quem não sabe, atualmente sou desenvolvedor FullStack e desenvolvo em diversas tecnologias,
1 Comment
Alisson Kissel
janeiro 06, 10:59