Clojure mult vs core.async中的广播

Clojure mult vs core.async中的广播,clojure,clojurescript,core.async,Clojure,Clojurescript,Core.async,我在玩core.async,发现使用它很有趣。然而,我无法理解mult和broadcast的不同用例。它们都是需要的还是一个会被另一个取代? 到目前为止,我发现的唯一区别是,使用mult更容易进入和解除标记。不知道如何取消订阅广播,这是唯一的区别吗 下面我举了一个例子,展示了如何使用这两种方法解决问题 ;; Using mult with tap (def in (chan)) (def multiple (mult in)) (def out-1 (chan)) (tap multiple

我在玩core.async,发现使用它很有趣。然而,我无法理解mult和broadcast的不同用例。它们都是需要的还是一个会被另一个取代? 到目前为止,我发现的唯一区别是,使用mult更容易进入和解除标记。不知道如何取消订阅广播,这是唯一的区别吗

下面我举了一个例子,展示了如何使用这两种方法解决问题

;; 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)))
;;使用带水龙头的骡子
(陈德仁)
(def多路(多路输入))
(def out-1(chan))
(点击多个out-1)
(def out-2(chan))
(点击多个out-2)
(在“普京”中使用“>”)
(从out-1开始执行(prn):(
//

;;使用广播
(陈耀文)
(陈耀文)
(def广播进入(广播第1回合第2回合))
(go(>!在“PutINBroadcast”中广播)

(bout-1中的go(prn):(这是对
clojure.core.async.lab
命名空间的注释,带有
广播

core.async高度实验性的功能探索

注意事项:

  • 此命名空间中定义的所有内容都是实验性的,可以在没有警告的情况下进行更改或删除

  • 此名称空间提供的许多功能与core.async.Potential功能的实现细节高度耦合 在更高的抽象级别上,适合包含在 例子

  • 此命名空间提供的功能可能会在以后的某个时间点升级到clojure.core.async,但不能保证 他们中的任何一个都会

  • 很长一段时间以来没有人对它进行过研究,它从未被移植到ClojureScript。我希望它在不久的将来从core.async中删除。
    mult
    是后来的开发

    ;; 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)))