核心.async中的mult与broadcast有什么区别?

3
我正在尝试使用core.async,并发现它非常有趣。然而,我不太理解mult和broadcast的不同用例。它们都是必需的吗?还是其中一个会被另一个替代? 到目前为止,我唯一发现的区别是使用mult更容易进行tap-in和untag。不确定如何从broadcast中取消订阅,这是唯一的区别吗? 下面是一个示例,展示了如何使用这两种方法来解决问题。
;; Using mult with tap
(def in (chan))
(def multiple (mult in))

(def out-1 (chan))
(tap multiple out-1)

(def out-2 (chan))
(tap multiple out-2)

(go (>! in "PutIN"))

(go (prn "From out-1: " (<! out-1)))
(go (prn "From out-2: " (<! out-2)))

//

;; Using broadcast
(def bout-1 (chan))
(def bout-2 (chan))
(def broadcast-in (broadcast bout-1 bout-2))

(go (>! broadcast-in "PutINBroadcast"))
(go (prn "From bout-1: " (<! bout-1)))
(go (prn "From bout-2: " (<! bout-2)))
1个回答

6
这是有关于 clojure.core.async.lab 命名空间和 broadcast 的注释。
核心异步高度实验性的功能探索
注意事项: 1. 此命名空间中定义的所有内容都是实验性的,可能会在没有警告的情况下更改或删除。 2. 此命名空间提供的许多功能与 core.async 的实现细节高度耦合。操作在更高级别抽象层次上的潜在功能适合包含在示例中。 3. 此命名空间提供的功能可能会在以后被提升到 clojure.core.async 中,但不能保证任何一个功能都会被提升。
很长时间以来没有人再开发它了,也从未移植到ClojureScript。我期望它将在不久的将来从core.async中删除。mult是更晚的开发。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接