typestar

Pipelines en Go

Cada etapa lee un canal y devuelve otro, así que las etapas se componen.

func generate(limit int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for i := 1; i <= limit; i++ {
            out <- i
        }
    }()
    return out
}

func square(in <-chan int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for value := range in {
            out <- value * value
        }
    }()
    return out
}

func sumPipeline(limit int) int {
    total := 0
    for value := range square(generate(limit)) {
        total += value
    }
    return total
}

Cómo funciona

  1. Cada etapa cierra el canal que le pertenece.
  2. Las etapas corren en concurrente, así que el trabajo se superpone.
  3. El range final drena la última etapa.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
29
Caracteres a escribir
425
Tokens
126
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 69 segundos.

Escribe este fragmento

Paso 4 de 5 en Patrones; paso 22 de 25 en Concurrencia.

← Anterior Siguiente →

Pipelines en otros lenguajes