Concurrency 数据流并发的一个很好的激励示例是什么?

Concurrency 数据流并发的一个很好的激励示例是什么?,concurrency,dataflow,Concurrency,Dataflow,我了解数据流编程的基础知识,并在Groovy等中遇到过一些。我知道它在Io等语言中很流行(尽管我没有研究过Io) 我缺少的是一个令人信服的理由,即在构建并发程序时,将数据流作为一种范例来关注。为什么我要使用一个数据流模型而不是一个可变的状态+线程+锁模型(爪哇、C++等常见的)或者一个参与者模型(Erlang或Scala中常见的)或者其他什么东西? 特别是,虽然我知道上述语言(以及Scala和Ruby)中的库支持,但我不知道有哪个程序或库是此模型的典型子用户。谁在用它?为什么他们发现它比我提到的

我了解数据流编程的基础知识,并在Groovy等中遇到过一些。我知道它在Io等语言中很流行(尽管我没有研究过Io)

我缺少的是一个令人信服的理由,即在构建并发程序时,将数据流作为一种范例来关注。为什么我要使用一个数据流模型而不是一个可变的状态+线程+锁模型(爪哇、C++等常见的)或者一个参与者模型(Erlang或Scala中常见的)或者其他什么东西?
特别是,虽然我知道上述语言(以及Scala和Ruby)中的库支持,但我不知道有哪个程序或库是此模型的典型子用户。谁在用它?为什么他们发现它比我提到的其他模型更好?

如果你仔细想想,关系数据库就是典型的孩子。想象一下任何评估计划,其中每个操作员处理来自其他操作员/表的行流,并生成输入其他操作员的流

从网络上窃取的随机图像:
(来源:)

我有一个很好的“海报孩子”(我喜欢这个词)给你。我想,你以前从未见过,但你可能听说过

我认为,几乎所有的现代数字合成器和采样器内部都有某种数据流架构。让我告诉你它们是如何工作的

我不确定罗兰JV-1080是否是第一款,但它是最著名的带有4层声音发生器方案的合成器。当您按下键盘上的某个键时,修补程序正在启动。它由1..4个声音发生器组成。声音发生器是一系列组件:振荡器、滤波器、信封、放大器。JV-1080能够一次播放64个声音发生器。有源声音发生器的输出进入效果配置。声音发生器路径为“硬接线”,您可以选择效果总线的入口点和数量

罗兰JV-1080的效果总线有4个入口点:干燥、定制效果、唱诗班、混响,还有主要输出。效果总线是固定的,但所有效果的输出都连接到它最右边的所有其他效果,因此您可以通过将数量设置为零来“删除它们之间的连接”

Alesis QS系列(QuadraSynth、QS6-7-8-R和x.1版本)具有近乎完美的架构,效果系统与之类似。。。除此之外,您可以从3 FX配置中选择一个。一个FX配置是为器官(QS有难以置信的莱斯利仿真):莱斯利,合唱团,混响;另一个FX配置有两个混响。你有更多的自由如何利用马力的齿轮

这些合成器很棒,但当您遇到Clavia Nord Modular时,您会忘记它们。它没有4层架构,也没有FX配置。它附带一个win32程序,一个数据流编辑器。有各种组件:振荡器、滤波器、包络发生器等,您可以绘制配置。你应该画一个传统的4层声音发生器,但如果你愿意,你甚至可以画一个99层的。它只是简单的岩石。(不得不说,DF不是一切:罗兰JV有44.1 kHz的采样频率,QS有48k,Modular有96k。)

Clavia还有另外一条合成线:Nord Lead。里面有Modular的引擎(参数和声音都是一样的),但是你不能使用dataflow编程器。他们有一条固定的路径,有很多参数,但是你不能改变路线。此外,还有用于模块化的Nord Lead补丁集:所有路径在编辑器中看起来都一样,只是参数不同

下面是一个模块化补丁示例

如果您对synth示例不满意,比如说,因为您是C程序员,下面是另一个更熟悉的示例:

make-j


令我惊讶的是,make是一个数据流系统,所以它可以同时运行“组件”,这意味着在多核机器上更快地编译。试试看

我也有一个错误的例子。它没有实现干净的参与者模型,也没有并发问题,但它使用DF体系结构,并且非常流行:任何电子表格软件(例如MS Excel)

修改单元格时,它会向引用该单元格的单元格发送“重新计算”信号。尽管如此,当您处理一个越来越大的工作表时,您可以感受到数据流编程的真正味道-工作重点将发生变化:

  • 创建公式失去了它最初的重要性(你会发现自己只是克隆了相同的3-4个公式)
  • 布局变得更加重要:重新组织引用,将长公式拆分为短公式,隐藏参数,最后从数据中形成图形
如果我们意识到,公式是组件,引用是消息,我们就会得到数据流编程的通常方式:首先,我们创建一些组件,然后用它们构建数据流图。如果组件太大,我们会将其拆分为较小的组件。最后,我们将挑选一个可视化组件来展示令人眼花缭乱的结果。

请查看以下内容:

它是VSTi的音频相关框架和组件集。我不知道它到底是如何运行的,但看起来作者发布的软件中有自己的一组标准组件,然后其他人可以通过编译DLL来附加它们

另外,我刚刚在附近抓到一个人,我们在同一个邮件列表上,他创建了一个不错的TB303模拟器(著名的模拟复古synth),他使用SynthEdit作为框架创建了它。所以,如图所示,它可以用作框架,不存在任何技术(或bizmodel)困难

因此,值得一看,我在浏览文档时发现了很好的实现实践。虽然,该网站不包含单词dataflow,文档应该更好地编辑,项目的精神是可以的。还有一些“第三方”组件开发人员。它的正面很漂亮