Aula 08 - Concorrência em Go ⚡
Desbloqueando a Alta Performance
Agenda de Hoje 📅
- Concorrência vs Paralelismo
- Goroutines: Threads Levíssimas
- Canais (Channels): Comunicação Segura
- O Poder do
select - Sincronização com WaitGroups
- 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.
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
mainsabe 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."