i understand 'go blocks' (whether go
or go-loop
or possibly other constructs) return channel. have never understood channel's purpose. i'd know how use it. perhaps i'm creating channels when don't need be.
i use return channel of go
-block handle can pass function (not macro) wants synchronize completion of go
-block. alternatively, can preform blocking reads on channel guarantee when execution of go
-block has completed.
here simple example (not meant used production code compute sum) two-way parallelization:
(defn par-sum [coll] (let [half-n (/ (count coll) 2) [left right] (split-at half-n coll) left-sum-chan (async/go (core/reduce + 0 left)) right-sum (core/reduce + 0 right) left-sum (async/<!! left-sum-chan)] (+ left-sum right-sum)))
in example, compute left , right sums in parallel. since need left sum compute overall sum, have wait on result , retrieve result of go
-block.
Comments
Post a Comment