ExpertiDict

Go · Avançado · Inglês · Técnico

fan-out fan-in

/fæn aʊt fæn ɪn/substantivo

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

Veja também

Todos os termos de Go