core.async中pub和mult之间的区别是什么? &安培;一个样本用例?

时间:2014-03-20 10:50:44

标签: clojure core.async

我已经使用core.async一段时间了,但是避免了pubmult,因为我无法从他们的文档中真正掌握一个有用的用例。

具体说明topic-fn的目的是什么?你将如何在实践中使用它?

或许你可以将理论解释映射到下面的虚构方法。我认为这有助于了解它在实践中的运作方式(如果适用的话)?

虚拟方法解释:

可以有几种不同的视图来表示状态。为了让他们采取行动并响应状态变化,我希望有几个渠道(在应用程序级别上),例如 - 专用于状态更改用户输入(如按键)。

每个视图都应该能够(划线)到此应用程序通道,以便它们可以独立地对更改做出反应。此外,每个视图都应该可以{em>状态通道上的put(但不是用户输入-chan)。

1 个答案:

答案 0 :(得分:21)

core.async中的频道是单播,单拍。也就是说,任何进入的消息都只给予一个接受者。这在广播情况下效果不佳,其中许多去块需要将每个消息的副本放入频道,然后您需要其他内容。这就是mult有用的东西。 Mult也可能被称为“广播”

然后

Pub就是mult + multimethods。 topic-fn是应用于每个输入项的函数。函数的输出决定了消息的主题。然后,输入消息仅广播给正在收听该主题的订户。

更多信息请参阅我上次Conj的演讲中的注释,可在此处获取:https://github.com/halgari/clojure-conj-2013-core.async-examples/blob/master/src/clojure_conj_talk/core.clj#L398