如何清楚地构建core.async通道之间的依赖关系?

Ben*_*Ben 7 clojure core.async

假设我有一个计算语料库,我想使用core.async异步运行,但不幸的是,一些函数依赖于其他函数的输出.如何在我的代码中干净地构建这个,同时获得最佳性能?

我遇到的一些潜在解决方案是

  • Prismatic的图表 - 看起来很合理,虽然我没有用core.async频道测试它; 事实上,它需要使用fnk对我来说有点不利,因为它需要购买他们的DSL用于功能定义,但如果这是最好的解决方案,那么我不介意.
  • Javelin单元格 - 仅用于ClojureScript(当前)并使用FRP而不是CSP作为实现,但它通过公式单元格在计算之间建立依赖关系方面做得非常好.
  • Onyx - 用于分布式计算(作为Apache Storm的竞争对手等),但具有"工作流"抽象,处理计算之间的依赖关系并与core.async一起使用.这似乎最适合我的问题域,但我不确定是否需要所有集群管理功能的开销.

这个问题的规范解决方案是什么?

编辑:添加了Onyx

小智 1

我不认为有一个规范的方法可以解决这个问题,core.async 太新了以至于很少有人尝试过。如果我要在您的三个选项中进行选择,我会选择 Graph,它已经在生产中部署和测试了一段时间,并且您不需要 Clojurescript 来运行它。如果您对 FRP 解决方案感兴趣,请查看Java Reactive Extensions,它的 Clojure 绑定存在于RxClojure中。