Laboratório

- Configuração
- Exercício
- Tarefa
Configuração
- Instale o Go e verifique com
go version
- Crie o diretório
lab5
:
mkdir lab5
- Acesse o diretório e inicialize um módulo:
cd lab5
go mod init github.om/seu-usuario/lab5
Criar um worker pool para processamento concorrente de tarefas
Objetivo
Implementar um worker pool que processa tarefas de cálculo (ex.: calcular o quadrado de números) usando goroutines e channels, com sincronização via sync.WaitGroup
e logging
estruturado.
Passo a passo
- Crie um arquivo
workerpool.go
com o seguinte código:
Carregando editor interativo...
Execução
go run workerpool.go
Tarefa
- Adicione um
context.Context
para suportar cancelamento do worker pool após um timeout. - Implemente um mecanismo para lidar com erros em uma tarefa (ex: valor inválido).
- Use
select
para processar resultados com um timeout por tarefa.
Saída esperada
Console
Tarefa 1: Quadrado = 1
Tarefa 2: Quadrado = 4
Tarefa 3: Quadrado = 9
Tarefa 4: Quadrado = 16
Tarefa 5: Quadrado = 25
Logs JSON (exemplo)
{"time":"2025-06-12T01:07:00Z","level":"INFO","msg":"Tarefa enviada","tarefa_id":1,"valor":1}
{"time":"2025-06-12T01:07:00Z","level":"INFO","msg":"Processando tarefa","worker":1,"tarefa_id":1,"valor":1}
...
{"time":"2025-06-12T01:07:01Z","level":"INFO","msg":"Processamento concluído","total_tarefas":5}
Caso de uso prático
O worker pool
simula cenários reais, como processamento de filas de mensagens (ex: RabbitMQ
) ou tarefas em lote (ex: redimensionamento de imagens).