From 91d3497f7d930f27fa965617c9bb2a8cd0d3841c Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Mon, 5 Jun 2017 08:44:17 +0100 Subject: [PATCH] parallelise 'reduce' --- render/render.go | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/render/render.go b/render/render.go index 415bc3ffb..da48658cc 100644 --- a/render/render.go +++ b/render/render.go @@ -39,11 +39,25 @@ func MakeReduce(renderers ...Renderer) Renderer { // Render produces a set of Nodes given a Report. func (r *Reduce) Render(rpt report.Report, dct Decorator) report.Nodes { - result := report.Nodes{} - for _, renderer := range *r { - result = result.Merge(renderer.Render(rpt, dct)) + l := len(*r) + switch l { + case 0: + return report.Nodes{} } - return result + c := make(chan report.Nodes, l) + for _, renderer := range *r { + renderer := renderer // Pike!! + go func() { + c <- renderer.Render(rpt, dct) + }() + } + for ; l > 1; l-- { + left, right := <-c, <-c + go func() { + c <- left.Merge(right) + }() + } + return <-c } // Stats implements Renderer