Como multithreads podem salvar sua vida

André Mendes
Aug 12, 2018 · 3 min read

Bom este artigo não é voltado para te ensinar como usar threads ou métodos assíncronos, existem diversos materiais para isso. O objetivo deste artigo é mostrar como uma aplicação multithread vai te dar um ganho absurdo.

Primeiro, o que são threads:
Linha ou Encadeamento de execução (em inglês: Thread), é uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrencialmente.

Então thread é uma execução de um bloco de código “separado” da sua aplicação, é como se você tivesse um programa paralelo para rodar aquele bloco de código que deseja, e multithread é o seu sistema operacional executar várias threads ao mesmo tempo.

Fazendo uma comparação com o mundo real, imagine-se em um supermercado e uma fila gigantesca para passar as compras no caixa. Imagine que existem vários caixas porém só 1 está aberto (imagine nada, é assim que acontece não é?), esta seria uma aplicação monothread, ou seja, uma certa demanda para um único caixa (thread). Agora imagine os demais caixas abrindo, o atendimento ia ser bem mais rápido correto? Isso seria uma aplicação multithread.

Pois bem, mãos à massa.

Criei uma aplicação onde validaremos clientes:

Criei um método que retorna 60 clientes para podermos simular uma aplicação real de validação:

No nosso serviço, que chamaremos para validar o CPF do cliente, fiz um thread sleep de 0,5 segundos simulando uma validação em uma API que demora 0,5 segundos pare responder:

Agora recebemos a nossa lista com 60 clientes e chamamos o serviço monothread:

Essa é nossa aplicação monothread, ela recebe a lista de 60 clientes e para cada cliente dentro da lista ela chama o serviço para validar o CPF:

Resultado obtido:

Como podemos ver, a aplicação para 60 clientes que demora 0,5 segundos para cada um levou 30 segundos para terminar. É um tempo até razoável, mas e se fossem 1000 clientes?

É aí que entram as multithreads.

Não vou entrar no mérito do código pois existem diversas maneiras de se fazer, eu quebrei o código de uma maneira que fique fácil de enxergar o que estamos fazendo aqui.

Para resumir a lista de 60 clientes foi dividida em 12 listas de 5 clientes e chamamos o método para validar as 12 listas em 12 threads separadas:

*importante notar que em c# utilizamos Task, que é uma classe que faz o controle das threads, grosseiramente aqui estamos falando que Task são threads mas não são, é só um exemplo, a ideia aqui é trazer o ganho das threads e não entrar em detalhes a nível de código e linguagem.

Pois bem, rodando a aplicação com multithreads:

Temos o resultado:

Perceba a diferença absurda de ganho que temos, a aplicação rodou 6x mais rápido, e isso porque limitamos o número de threads.

TOME CUIDADO: Apesar do ganho das threads temos que ter muito cuidado com elas, para outras threads não usarem a mesma lista ao mesmo tempo, para não causar overheads entre outros problemas.

Agora que você conhece mais sobre os ganhos da multithread, crie um programa, brinque um pouco com elas, estude, saiba as melhores práticas que sua aplicação vai ganhar uma performance significativa.

Todo o código aqui escrito encontra-se no meu GITHUB, convido você a clonar o mesmo e se divertir:

https://github.com/AndreMendesMarcondes/DemoMultithread

André Mendes

Written by

Analista de sistemas, amante de desenvolvimento, futuro arquiteto de software