(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[467],{5348:function(e,a,s){(window.__NEXT_P=window.__NEXT_P||[]).push(["/blog/paralelismocsharp",function(){return s(2278)}])},5201:function(e,a,s){"use strict";var r=s(5893);s(7294),a.Z=()=>(0,r.jsx)("section",{className:"colorlib-blog",style:{paddingBottom:"0px",paddingTop:"1em",textAlign:"center"},children:(0,r.jsx)("div",{className:"colorlib-narrow-content",children:(0,r.jsx)("a",{href:"/",children:"Voltar para a p\xe1gina inicial"})})})},2278:function(e,a,s){"use strict";s.r(a),s.d(a,{default:function(){return x}});var r=s(5893),o=s(2613),l=s(1314),n=s(708),i=s(5716),d=s(8509),c=s(6895),m=s(4643),t=s(3114),u=s(5871);s(7294);var p=()=>(0,r.jsx)("section",{className:"colorlib-blog","data-section":"paralelismo",children:(0,r.jsx)("div",{className:"colorlib-narrow-content",children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col-md-12 col-md-offset-3 col-md-pull-3 animate-box","data-animate-effect":"fadeInLeft",children:[(0,r.jsx)("span",{className:"heading-meta",children:"Leitura"}),(0,r.jsx)("h2",{className:"colorlib-heading",children:"Diferentes formas de trabalhar com paralelismo no C#: threads, Parallel For e Parallel LINQ"}),(0,r.jsx)("h5",{children:"Criado em 27/12/2022"}),(0,r.jsx)("p",{children:"O paralelismo \xe9 uma t\xe9cnica que permite que voc\xea divida uma tarefa em v\xe1rias partes e execute essas partes ao mesmo tempo, aproveitando ao m\xe1ximo o poder de processamento do seu computador. Isso pode ser \xfatil quando voc\xea precisa realizar uma tarefa que leva muito tempo, como processar uma grande quantidade de dados ou executar uma simula\xe7\xe3o complexa."}),(0,r.jsx)("p",{children:"No C#, existem v\xe1rias formas de se trabalhar com paralelismo, dependendo da sua necessidade. Algumas dessas formas s\xe3o:"}),(0,r.jsx)("h4",{children:"Threads"}),(0,r.jsxs)("p",{children:["As ",(0,r.jsx)("strong",{children:"threads"})," s\xe3o um recurso do sistema operacional que permitem que voc\xea execute uma tarefa em paralelo com outras tarefas. No C#, voc\xea pode criar threads usando a classe ",(0,r.jsx)("code",{children:"Thread"})," ou a classe ",(0,r.jsx)("code",{children:"Task"}),". Por exemplo:"]}),(0,r.jsxs)("pre",{children:[" ",(0,r.jsxs)("code",{className:"language-csharp",children:["\n","using System.Threading;","\n","\n","Thread thread = new Thread(() => ","{","\n"," ","// Aqui vai o c\xf3digo da thread","\n","}",");","\n","thread.Start();","\n","\n","// Ou","\n","\n","Task.Run(() => ","{","\n"," ","// Aqui vai o c\xf3digo da task","\n","}",");","\n"," "]}),"\n"," "]}),(0,r.jsx)("p",{}),(0,r.jsx)("h4",{children:"Parallel For:"}),(0,r.jsx)("p",{}),(0,r.jsxs)("p",{children:[" ","O ",(0,r.jsx)("strong",{children:"Parallel For"})," \xe9 uma estrutura de loop que permite que voc\xea execute um loop de forma paralela ou seja, em m\xfaltiplas threads ao mesmo tempo. Voc\xea pode usar o ",(0,r.jsx)("strong",{children:"Parallel For"})," ","usando o m\xe9todo ",(0,r.jsx)("code",{children:"Parallel.For"}),"ou a classe ",(0,r.jsx)("code",{children:"ParallelLoopResult"}),". Isso pode ser \xfatil quando voc\xea precisa realizar uma tarefa em uma grande quantidade de elementos e quer aproveitar ao m\xe1ximo o poder de processamento do seu computador. Por exemplo:"]}),"Para usar o ",(0,r.jsx)("strong",{children:"Parallel ForEach"}),", basta chamar o m\xe9todo",(0,r.jsx)("code",{children:"Parallel.ForEach"})," e passar como par\xe2metros uma cole\xe7\xe3o de elementos e uma a\xe7\xe3o a ser executada em cada elemento. Por exemplo:",(0,r.jsx)("p",{}),(0,r.jsxs)("pre",{children:[" ",(0,r.jsxs)("code",{className:"language-csharp",children:["\n","List",(0,r.jsxs)("int",{children:[" ","numbers = new List",(0,r.jsxs)("int",{children:[" ","{"," 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ","}",";","\n","\n","Parallel.ForEach(numbers, (number) => ","{","\n"," ",'Console.WriteLine($"Processing number ',"{","number","}",'");',"\n","}",");","\n"," "]})]})]}),"\n"," "]}),(0,r.jsxs)("p",{children:["Esse c\xf3digo ir\xe1 imprimir a mensagem"," ",(0,r.jsx)("strong",{children:'"Processing number X"'})," para cada n\xfamero da lista, mas a ordem em que as mensagens s\xe3o impressas pode ser diferente da ordem original da lista, pois cada itera\xe7\xe3o do loop \xe9 executada em uma"," ",(0,r.jsx)("strong",{children:"thread"})," diferente."]}),(0,r.jsxs)("p",{children:["Al\xe9m disso, o ",(0,r.jsx)("strong",{children:"Parallel ForEach"})," tamb\xe9m permite que voc\xea especifique op\xe7\xf5es de execu\xe7\xe3o, como o n\xfamero m\xe1ximo de threads a serem utilizadas ou o modo de paralelismo a ser utilizado. Por exemplo:"]}),(0,r.jsxs)("pre",{children:[" ",(0,r.jsxs)("code",{className:"language-csharp",children:["\n","ParallelOptions options = new ParallelOptions ","{"," ","MaxDegreeOfParallelism = 4 ","}",";","\n","\n","Parallel.ForEach(numbers, options, (number) => ","{","\n"," ",'Console.WriteLine($"Processing number ',"{","number","}",'");',"\n","}",");","\n","\n"," "]}),"\n"," "]}),(0,r.jsxs)("p",{children:["Nesse exemplo, o ",(0,r.jsx)("strong",{children:"Parallel ForEach"})," ir\xe1 utilizar no m\xe1ximo 4 threads para executar o loop, o que pode ser \xfatil em casos em que voc\xea n\xe3o quer sobrecarregar o sistema com muitas threads."]}),(0,r.jsxs)("p",{children:["Em resumo, o ",(0,r.jsx)("strong",{children:"Parallel ForEach"})," \xe9 uma ferramenta muito \xfatil para acelerar o processamento de tarefas em grandes cole\xe7\xf5es de dados, mas \xe9 importante levar em considera\xe7\xe3o que o uso excessivo de threads pode sobrecarregar o sistema e at\xe9 mesmo diminuir o desempenho em alguns casos. Por isso, \xe9 sempre importante medir o impacto do uso do",(0,r.jsx)("strong",{children:"Parallel ForEach"})," em seu c\xf3digo e, se necess\xe1rio, ajustar as op\xe7\xf5es de execu\xe7\xe3o para obter o melhor resultado poss\xedvel."]}),(0,r.jsx)("p",{}),(0,r.jsx)("h4",{children:"Parallel LINQ (PLINQ)"}),(0,r.jsx)("p",{}),(0,r.jsxs)("p",{children:["O ",(0,r.jsx)("strong",{children:"Parallel LINQ"})," \xe9 um conjunto de operadores que permite que voc\xea execute consultas LINQ de forma paralela. Voc\xea pode usar o ",(0,r.jsx)("strong",{children:"Parallel LINQ"})," usando o m\xe9todo",(0,r.jsx)("code",{children:"AsParallel"})," e os operadores"," ",(0,r.jsx)("code",{children:"WithDegreeOfParallelism"})," e",(0,r.jsx)("code",{children:"WithExecutionMode"}),". Por exemplo:"]}),(0,r.jsxs)("pre",{children:[" ",(0,r.jsxs)("code",{className:"language-csharp",children:["\n","using System.Linq;","\n","\n","var result = from n in Enumerable.Range(0, 10)","\n"," ",".AsParallel()","\n"," ",".WithDegreeOfParallelism(2)","\n"," ",".WithExecutionMode","\n"," ","(ParallelExecutionMode.ForceParallelism) select n;","\n"," "]}),"\n"," "]}),(0,r.jsxs)("p",{children:["Em resumo, o paralelismo \xe9 uma t\xe9cnica poderosa para acelerar o processamento de tarefas que levam muito tempo, mas \xe9 importante levar em considera\xe7\xe3o que o uso excessivo de threads pode sobrecarregar o sistema e at\xe9 mesmo diminuir o desempenho em alguns casos, por isso avalie bem o cen\xe1rio e utilize as"," ",(0,r.jsx)("strong",{children:"ferramentas de diagn\xf3stico"})," da pr\xf3pria IDE para identificar as m\xe9tricas e verificar se a altera\xe7\xe3o est\xe1 sendo eficiente ou n\xe3o, em breve vou escrever um artigo sobre essas ferramentas, at\xe9 breve! :)"]})]})})})}),h=s(5201),x=()=>(0,r.jsx)("div",{id:"colorlib-page",children:(0,r.jsxs)("div",{className:"container-wrap",children:[(0,r.jsx)(o.Z,{}),(0,r.jsxs)("div",{id:"colorlib-main",children:[(0,r.jsx)(h.Z,{}),(0,r.jsx)(p,{}),(0,r.jsx)(l.Z,{}),(0,r.jsx)(n.Z,{}),(0,r.jsx)(i.Z,{}),(0,r.jsx)(d.Z,{}),(0,r.jsx)(c.Z,{}),(0,r.jsx)(m.Z,{}),(0,r.jsx)(t.Z,{}),(0,r.jsx)(u.Z,{})]})]})})}},function(e){e.O(0,[34,774,888,179],function(){return e(e.s=5348)}),_N_E=e.O()}]);