Skip to content

Instantly share code, notes, and snippets.

@alexrios
Last active June 27, 2021 09:40
Show Gist options
  • Save alexrios/49d3787e47ec4546167a3f9f9c775aed to your computer and use it in GitHub Desktop.
Save alexrios/49d3787e47ec4546167a3f9f9c775aed to your computer and use it in GitHub Desktop.
Go Concorrente

Go Concorrente

Intro

  • Concorrência
  • Scheduler
    • internals (semantics)
  • Deadlocks, Livelocks e starvation
  • O que é CSP?

Nivel 1

  • Go Routines
  • Wait Group (pacote sync)
  • Preemptivo ou cooperativo?

Não deveria ser mais simples?

  • extra: errGroup

Nivel 2

Compartilhando estado

  • Atomic

Não quero mudar meu algoritimo

  • Mutex

Tive um grande idéia

  • over lock/unlock

Não precisa ser tudo ou nada.

  • RwMutex

Um mapa sincronizado de graça

  • sync.Map

"de graça"

  • Comparando sync.Map vs. Map + Mutex

Como eu sei que não vai dar errado?

  • Data Race

Casos comuns

  • Contador no loop
  • Variavel compartilhada acidentalmente
  • Variavel global desprotegida
  • Variavel primitiva desprotegida

O custo do detector data race

  • Penalidades de performance

Extra: Semaphore (sync package)

  • intro
  • Quando usar?
  • Cenarios do mundo real
  • exercicios

Extra: Single Flight (sync package)

  • intro
  • Quando usar?
  • Cenarios do mundo real
  • exercicios

Nivel 3

Intro

  • intro
  • Guidelines
  • Garantias, latência e estado
    • buffered vs. unbuffered

Tipos de canais

  • Generators
    • exercicios
    • Cenarios do mundo real
  • Channel as Handle
    • exercicios
    • Cenarios do mundo real
  • Multiplexing
    • exercicios
    • Cenarios do mundo real

Essa é a melhor ferramenta para o trabalho?

  • Como evitar vazamento de goroutines
  • mutex vs channels vs outros
  • guidelines

Nivel 4

Um por todos e todos por um

  • Fan In
    • Exercicios
  • Fan Out
    • Exercicios
  • error handling

Nivel 5

Patterns

  • Pipeline
  • for-select loop
  • Tee Channel
  • or-done channel
  • Bridge Channel
  • heart beat
  • (em breve mais)

Nivel 6

Reaproveitando alocações

  • sync.Pool
  • exemplo
  • exercicio

Garantindo uma unica execução da função

  • sync.Once
  • exemplo
  • exercicio

Multiplos Threshold

  • sync.Cond
  • exemplo
  • exercicio

Nivel 7

Projetos para avaliação

  • Recuperando goroutines não saudaveis.
  • Cache com TTL
  • Graceful shutdown em um servidor ouvindo em multiplas portas
  • Connection Pool

OUTRO

  • Goroutine errors
  • Go Runtime
@alexrios
Copy link
Author

2 coisas:

  1. QUERO
  2. A parte de testes terá análise de race conditions né?

Tem que ter! senão é copy-n-pasta.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment