Sobes.tech
Junior — Middle

Consegue listar os principais padrões utilizados na implementação de multithreading?

sobes.tech IA

Resposta da IA

Os principais padrões de concorrência incluem:

  • Pool de threads (Thread Pool): quantidade fixa de threads que são reutilizadas para executar tarefas, o que reduz os custos de criar novas threads.

  • Produtor-consumidor (Producer-Consumer): um ou mais threads produzem dados, outros os consomem, geralmente usando uma fila segura para threads.

  • Barreira (Barrier): sincronização de vários threads para que todos atinjam um ponto específico antes de continuar.

  • Mutexes e semáforos: para proteger recursos compartilhados e gerir o acesso.

  • Futuros e Promessas (Futures/Promises): para obter resultados de forma assíncrona a partir de threads.

  • Modelo ator: cada ator é um thread separado ou um objeto com uma fila de mensagens que os processa sequencialmente.

Em Go, frequentemente usam-se goroutines e canais, que simplificam muitos desses padrões, por exemplo, um canal pode ser usado para implementar o padrão produtor-consumidor:

ch := make(chan int)

// Produtor
go func() {
    for i := 0; i < 5; i++ {
        ch <- i
    }
    close(ch)
}()

// Consumidor
for val := range ch {
    fmt.Println(val)
}