並列処理の本を読み終わったので、並列処理を作りました

寝る前にのんびり読んでたので、読み終わるのが遅くなりましたが。
「Go言語による並行処理」を読み終わりました。

www.amazon.co.jp

読み終わった記念に、ストリームっぽい書き方ができる物を作りました。

github.com

例えば、こんな感じで、5並列で20個素数を取得する物が書けます。

func main() {
    const (
        jobs = 5
        size = 20
    )

    primes := stream.Connect(
        context.Background(),
        stream.InfinityFn(gen),
        stream.Parallel(
            jobs,
            stream.Filter(isPrime),
        ),
        stream.Take(size),
    )

    for p := range primes {
        fmt.Println(p.(int))
    }
}

エラー処理はサポートしてないんで、panic()投げるか、stream.Map()stream.StopIf() で頑張ってねというスタンスです。