Programando de forma concorrente em Go

Bianca Rosa

lider de desenvolvimento @ stone

  • Python
  • Go
  • DevOps
  • PythOnRio / Pyladies

Concorrência vs Paralelismo

“Concorrência é sobre lidar com várias coisas ao mesmo tempo. Paralelismo é sobre fazer várias coisas ao mesmo tempo.” — Rob Pike

Um SO se utiliza de vários núcleos de uma CPU para fazer coisas em paralelo.

Programas concorrentes parecem estar rodando várias coisas ao mesmo tempo quando na realidade, não estão.

As coisas só mudam de estado muito rápido a olho nu.

Aqui, vamos focar em concorrência.

Por muito tempo foi difícil implementar, até que...

1-just-sleep.go

2-sleep-in-a-loop.go

3-sleep-with-go-routines.go

muito fácil! vou usar em tudo e meus programas vão voar!

segura a onda

Therac-25

nós, como desenvolvedores, precisamos ter responsabilidade com o problema que estamos tentando resolver.

e concorrência requer bastante responsabilidade.

condições de corrida

5-race-on-a-loop.go

6-accidentaly-share.go

detectando condições de corrida

só usar -race

quando usar

Em códigos que fazem muito I/O (requests, uso de dispostivos externos, etc)

quando não usar

4-not-useful.go

Algumas coisas são bastante simples, fazer de forma concorrente pode adicionar muita complexidade desnecessária.

twitter: @__biancarosa

slides: biancarosa.com.br/slides

código: github.com/biancarosa/go-concurrency

tks :)

referências

Concurrency is Not Parallelism - Rob Pike

Data Race Detector