Pular para conteúdo

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

  1. Paralelismo: Crie 4 threads para "processar" diferentes partes de um log (simulado por um vetor).
  2. Mensageria: Use um canal (mpsc) para enviar os resultados (quantidade de erros encontrados) de cada thread para a thread principal.
  3. Sincronização: A thread principal deve esperar todos os resultados e imprimir o total final de erros.

🚀 Guia de Execução

  1. 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::spawn corretamente.
  • [ ] A comunicação entre threads é feita exclusivamente via canais (mpsc).
  • [ ] O resultado final é a soma correta dos resultados parciais.