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
@viniciusgabrielfo
Copy link

Muito dahora, já vou entrar na fila

@fonini
Copy link

fonini commented Jun 23, 2021

Top demais!

@sptGabriel
Copy link

Top demais 👏🏻👏🏻

@mahjadan
Copy link

very promising :)

@alexrios
Copy link
Author

Show de bola a ementa! Tu entendes que é necessário deixar claro os pré-requisitos para quem está interessado em fazer o curso?

Sim! Em algum momento do tempo vou fazer esse recorte para deixar claro os requisitos mínimos para ter uma boa experiência de aprendizado com o conteúdo.

@alexrios
Copy link
Author

só senti falta de técnicas pros testes. Já ta incluído automaticamente algum capítulo ou nem?

Na grande maioria dos casos eu vou fazer os testes do que será implementado.

@alexrios
Copy link
Author

ficou boa ein =)

uma coisa q vejo as pessoas terem dificuldade nesse assunto é ver quando pode ser aplicado esses recursos. algumas pessoas até sabem a teoria não conseguem enxergar a oportunidade de uso.

Eu concordo! o mais dificil não é entender a ementa, mas conseguir fazer analogias com os problemas reais.

Pretendo atacar isso com:

  • analogias
  • exercicios
  • casos do mundo real

@devdrops
Copy link

2 coisas:

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

@larien
Copy link

larien commented Jun 24, 2021

Muito bom!

@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