typestar

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

  1. Cada worker recorre el mismo canal de trabajos.
  2. Una goroutine de cierre espera y luego cierra results.
  3. La goroutine principal recolecta hasta que results se cierra.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 5 en Patrones; paso 19 de 25 en Concurrencia.

← Anterior Siguiente →