6 maneiras de usar paralelismo com tarefas e threads em C# .NET
Você já se deparou com a situação de desenvolver um programa que executaria um processo com muitos dados para processar? Talvez seja necessário dividir esse processo em partes e uma boa maneira de fazer isso é implementar o paralelismo em seu programa.
Neste post, mostro algumas maneiras de implementar paralelismo usando C# .NET.
Não se enganem muito pelo exemplo. Neste artigo, o autor usa Task
e Thread
no mesmo lugar, e não são a mesma coisa, por mais que comportamentos parecidos. Um possui um pool gerenciado pelo Runtime, mais eficiente para operações assíncronas e tarefas no mesmo contexto, o outro é gerenciado pelo sistema operacional, onde o contexto varia um pouco mais e a conversação entre threads tem que ser feita com cuidado.
Parallel.For
tem poucos usos se souber usar bem. Se entender a fundo, entenderá que tarefas assíncronas não podem travar objetos com synclock, no caso é usado semáforos, mas reduzindo a performance geral.
Colocar lock (objeto)
em outro Thread nem sempre é a melhor resolução para seu problema. O .NET oferece o ConcurrentBag<T>
, ConcurrentStack
, ConcurrentSeiLáOque
para quase tudo o que você precisa, implementações prontas para serem usadas por mais de um thread.
Recomendo ler as diferenças entre Task e Threads, pode ajudar a entender o que quero dizer.
Ótimo post, concordo com o outro comentário, tenta trazer um benchmark de comparação. E seria interessante tentar trazer o artigo em português para o Tab, creio que assim seu conteúdo consiga atingir mais pessoas.
Vale a pena fazer um teste de Benchmark pra ver qual se sai melhor.
Bom post, experimenta trazer ele em português para o TabNews :)