Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Em busca da performance perfeita

Matheus
September 04, 2023

Em busca da performance perfeita

Matheus

September 04, 2023
Tweet

More Decks by Matheus

Other Decks in Programming

Transcript

  1. $ whoami • Mineiro • Sta ff Software Engineer @

    PicPay • 10+ anos trabalhando com computação • @mfbmina
  2. Performance computacional • É estimada em termos de acurácia, e

    fi ciência e velocidade na execução das instruções, por exemplo: • Baixo tempo de resposta • Alta taxa de processamento • Baixa utilização de recursos • (Des)Compressão rápida de dados • Alta disponibilidade do sistema • Alto trafégo
  3. Re-utilize memória sempre que possível • Alocar objetos na memória

    é algo caro e lento • Re-utilize objetos ao invés de alocar objetos novos • Sempre que um objeto é descartado, o garbage collector precisa atuar • sync.Pool pode te ajudar a controlar coleções de objetos e reduzir sua alocação
  4. Evite alocações desnecessárias • Pré-aloque slices que tem tamanho de

    fi nido • Use o append de forma inteligente para evitar alocações intermediarias desnecessariamente • Não passe grandes estruturas por valor, mas sim por referência
  5. Use ponteiros da melhor forma • Controle o escopo de

    uso do seus ponteiros • O uso excessivo de ponteiros pode causar maior consumo de memória e lentidão • Evite o uso do `unsafe.Pointer`, pois ele não segue a tipagem
  6. Utilize goroutines & channels • Concorrência: divide a computação em

    tarefas menores e executa essas tarefas de forma concorrente • Pipelines: organiza a execução em stages e cada execução se comunica com o próximo através de um channel. Os stages podem ser executados de forma concorrente • Fan in / Fan out: distribui as tarefas em diversas goroutines que são executadas concorrentemente. Depois agrega os resultados em um channel para um processamento posterior • https://github.com/cassiobotaro/concorrencia-go
  7. Por fi m, relembre a base… • Complexidade ciclomática vai

    te ajudar a entender a quantidade de saltos lógicos do seu código • Big O Notation te ajuda a entender qual o custo do seu algoritmo • Conheça algoritmos e estruturas de dados. Eles que te ajudam com determinados problemas
  8. Diversas vezes a lentidão está em… • Comunicação com o

    DB • Falta de índice em alguma tabela • Joins excessivos • Comunicação via http com outros serviços • Falta de cache • Latência de rede • …
  9. Dicas de um dev cansado… • Não saia otimizando nada

    antes de ser um problema, você só vai estar aumentando a complexidade do seu software • Se estiver com problemas de performance, use as ferramentas que você tem a sua disposição para encontrar o gargalo e achar a melhor solução • Conhecimento nunca é demais! Estude algoritmos, estruturas de dados, DBs, etc…