gpt4 book ai didi

clojure - 为什么 core.async go block 返回一个 channel ?

转载 作者:行者123 更新时间:2023-12-05 03:11:43 25 4
gpt4 key购买 nike

我知道“go blocks”(无论是 go 还是 go-loop 或其他可能的构造)返回一个 channel 。但是我一直不明白这个 channel 的目的。我想知道如何使用它。也许我在不需要的时候创建了额外的 channel 。

最佳答案

我使用 go block 的返回 channel 作为句柄,我可以将其传递给另一个想要与 go< 完成同步的函数(不仅仅是宏)/- block 。或者,我可以在 channel 上执行阻塞读取,以保证 go-block 的执行何时完成。

这是一个进行双向并行化的简单示例(不打算用于任何生产代码来计算总和):

(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 的结果。

关于clojure - 为什么 core.async go block 返回一个 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36236869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com