core.async中的mult vs broadcast

时间:2015-04-11 16:01:44

标签: clojure clojurescript core.async

我正在玩core.async并发现它非常有趣。但是,我无法理解多播和广播的不同用例。它们是否需要或者是否会被另一个取代? 到目前为止,我发现的唯一区别是,使用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)))

//

;; 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 个答案:

答案 0 :(得分:6)

这是clojure.core.async.lab名称空间broadcast的注释。

  

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

     

注意事项:

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

  2.   
  3. 此命名空间提供的许多功能都与core.async的实现细节高度耦合。运作的潜在特征   在更高的抽象水平适合包含在   实例

  4.   
  5. 此命名空间提供的功能可能会在以后提升为clojure.core.async,但不能保证   他们中的任何一个都会。

  6.   

现在没有人研究过它,它从未被移植到ClojureScript。我希望它能在不久的将来从core.async中删除。 mult是后来的发展。