Pular para conteúdo

Aula 08 - Concorrência em Go ⚡

Desbloqueando a Alta Performance


Agenda de Hoje 📅

  1. Concorrência vs Paralelismo
  2. Goroutines: Threads Levíssimas
  3. Canais (Channels): Comunicação Segura
  4. O Poder do select
  5. Sincronização com WaitGroups
  6. Mini-Projeto: Web Crawler Básico

1. Concorrência vs Paralelismo 🧩

  • Concorrência: Gerenciar múltiplas tarefas (composição).
  • Paralelismo: Executar tarefas ao mesmo tempo (hardware).
  • "Go é mestre em lidar com milhares de conexões ao mesmo tempo."

2. Goroutines 🪶

  • Inicie uma tarefa em background com apenas a palavra go.
  • Muito Leves: 2KB de RAM inicial.
go processoLongo() // Executa sem travar o main

3. Canais (Channels) 📡

  • Como as goroutines conversam? Através de "tubos".
canal := make(chan string)

go func() {
    canal <- "Feito!" // Envia
}()

msg := <-canal // Bloqueia até receber

4. CSP: A Filosofia do Go 🧐

"Não comunique compartilhando memória; compartilhe memória comunicando."

  • Evita Race Conditions (condições de corrida).
  • Código mais limpo e seguro.

5. Visualização de Canais 📊

graph LR
    G1[Goroutine A] -- envia --> CH((Canal))
    CH -- recebe --> G2[Goroutine B]
    style CH fill:#f9f,stroke:#333

6. Sincronização: WaitGroups 🛑

  • Como o main sabe que as goroutines terminaram?
var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()
    // Trabalho...
}()
wg.Wait() // Espera o trabalho acabar

Resumo da Aula ✅

  • Goroutines permitem escala massiva com pouco recurso.
  • Canais garantem que os dados troquem de mãos com segurança.
  • Go foi pensada para o mundo multicore moderno.

Próxima Aula: Programação Web 🌐

  • Iniciando o Backend Real.
  • O pacote net/http.

Dúvidas? 🤔

"O paralelismo é sobre execução, a concorrência é sobre estrutura."