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

Em busca da performance perfeita

Avatar for Matheus Matheus
September 04, 2023

Em busca da performance perfeita

Avatar for Matheus

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…