Pools de workers en Go
Un conjunto fijo de goroutines que drena un canal de trabajos.
func pool(jobs <-chan int, workers int) <-chan int {
results := make(chan int)
var wg sync.WaitGroup
for i := 0; i < workers; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for j := range jobs {
results <- j * j
}
}()
}
go func() {
wg.Wait()
close(results)
}()
return results
}
Cómo funciona
- Cada worker recorre el mismo canal de trabajos.
- Una goroutine de cierre espera y luego cierra results.
- La goroutine principal recolecta hasta que results se cierra.
Palabras clave y builtins usados aquí
chanclosedeferforfuncgointmakerangereturnvar
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 274
- Tokens
- 92
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 50 segundos.
Paso 1 de 5 en Patrones; paso 19 de 25 en Concurrencia.