我理解“去块”(无论是go
or go-loop
或可能的其他构造)返回一个通道。但我一直不明白这个频道的目的。我想知道如何使用它。也许我在不需要的时候创建了额外的频道。
我使用的返回通道go
-block 作为句柄,我可以将其传递给另一个想要与完成同步的函数(而不仅仅是宏)go
-堵塞。或者,我可以在通道上执行阻塞读取,以保证何时执行go
- 块已完成。
这是一个执行双向并行化的简单示例(并不意味着用于任何生产代码来计算总和):
(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)))
在此示例中,我们并行计算左右总和。
由于我们需要左总和来计算总和,因此我们必须等待结果并检索go
-block.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)