Go · Avançado · Inglês · Técnico
fan-out fan-in
Padrão em que várias goroutines consomem do mesmo channel (fan-out) e seus resultados são reunidos em um único channel (fan-in), paralelizando etapas de um processamento.
Onde usar
Usado quando uma etapa é lenta e pode ser dividida entre workers. O ponto delicado é fechar o channel de saída só quando todos os workers terminarem, normalmente com WaitGroup.
Em código
out := make(chan int)
var wg sync.WaitGroup
wg.Add(2)
go func() { defer wg.Done(); out <- 1 }()
go func() { defer wg.Done(); out <- 2 }()
go func() { wg.Wait(); close(out) }()
for v := range out { fmt.Println(v) }Exemplos
We fan out the work to eight goroutines and fan in the results.
Espalhamos o trabalho em oito goroutines e juntamos os resultados.
Fan-in needs a goroutine that closes the output after the wait.
O fan-in precisa de uma goroutine que fecha a saída depois do wait.
Cuidado
A ordem dos resultados não é preservada; se ela importa, carregue o índice junto com cada item.
Sinônimos
espalhar e juntar