使用 Clojure DataFlow 编程习惯

Posted

技术标签:

【中文标题】使用 Clojure DataFlow 编程习惯【英文标题】:Using Clojure DataFlow programming idioms 【发布时间】:2011-06-01 16:45:14 【问题描述】:

谁能解释一下我为什么以及如何使用 Clojure Dataflow 编程 API,因为我似乎在互联网上找不到太多关于它的信息。

【问题讨论】:

【参考方案1】:

我认为阅读有关什么是数据流编程的其他信息是最有帮助的。恕我直言,Groovy GPars 的人在 dataflow 上有一些最好的文档。 GPars mailing lists 过去曾就数据流、CSP 和参与者等进行过很多讨论,是提问的好地方。

其他一些有用的链接:

Data Flow concurrency in Groovy - Vaclav Pech (GPars) Flowing with the data - Vaclav Pech (GPars) Select dataflow - Vaclav Pech (GPars) 来自 GPars 文章的 example - Alex Miller Presentation - Jonas Boner (Akka / Scala) Wikipedia 当然

Clojure impl 非常简单,基本上是在 ref 之上构建数据流变量并在这些 ref 上监视函数。您可能会发现实际的 code 或 tests 比文档更有用。

引用数据流变量的典型示例是电子表格,其中每个变量都是电子表格中的一个单元格,由其他单元格的值定义。当一个单元格发生变化时,这些变化会按照依赖顺序向前传播。不过,数据流变量本身有些有限 - 我认为数据流是这个想法变得更有趣的地方。

在某种意义上,将轻量级处理节点调度在一组(通常较小的)固定线程上的想法,每个线程都由类似队列的流连接,在非常高的层次上描述了所有数据流流、参与者、CSP。目标是在所有情况下通过保持有工作要做的节点而不在没有工作的节点上浪费周期来保持高吞吐量,并且避免用户管理显式线程和锁(通过它们之间的队列/流/通道解耦)。

【讨论】:

在更多地研究 Clojure 数据流 API 之后,我认为您说它是“准系统”是对的。您知道 Rich 是否计划将其移至实验阶段? Rich 没有写它。我从未见过有人使用它或提及任何更新。作者列为 Jeffrey Straszheim。

以上是关于使用 Clojure DataFlow 编程习惯的主要内容,如果未能解决你的问题,请参考以下文章

Dataflow编程模型和spark streaming结合

我可以在 BigQuery 和 Google Cloud Dataflow 中使用相同的编程语言吗?

预售┃Scala与Clojure函数式编程模式:Java虚拟机高效编程

Clojure学习笔记——函数式编程

理解函数式编程

在 Clojure 项目中存储项目版本号的常见约定是啥?