Mini-Projeto: Processador de Logs Concorrente ⚡
Neste projeto, vamos simular o processamento de grandes arquivos de log usando Threads e Canais para ganhar performance.
📋 Requisitos
- Paralelismo: Crie 4 threads para "processar" diferentes partes de um log (simulado por um vetor).
- Mensageria: Use um canal (
mpsc) para enviar os resultados (quantidade de erros encontrados) de cada thread para a thread principal. - Sincronização: A thread principal deve esperar todos os resultados e imprimir o total final de erros.
🚀 Guia de Execução
- Implementação sugerida:
use std::sync::mpsc; use std::thread; use std::time::Duration; fn main() { let (tx, rx) = mpsc::channel(); let logs = vec!["INFO", "ERROR", "INFO", "ERROR", "DEBUG", "ERROR"]; for id in 0..3 { let tx_clone = tx.clone(); let parte_do_log = logs[id * 2..(id + 1) * 2].to_vec(); // Divide o log thread::spawn(move || { let erros = parte_do_log.iter().filter(|&&l| l == "ERROR").count(); thread::sleep(Duration::from_millis(500)); // Simula trabalho tx_clone.send(erros).unwrap(); }); } // Fecha o transmissor original para o loop do receptor terminar drop(tx); let mut total_erros = 0; for recebido in rx { total_erros += recebido; } println!("Processamento concluído. Total de erros: {}", total_erros); }
✅ Critérios de Aceite
- [ ] O programa utiliza
thread::spawncorretamente. - [ ] A comunicação entre threads é feita exclusivamente via canais (
mpsc). - [ ] O resultado final é a soma correta dos resultados parciais.