40

在过去的几天里,我一直在阅读有关基于流的编程的一些内容。有一个wiki提供了更多详细信息。维基百科对此也有很好的概述。我的第一个想法是,“另一个伟大的乐高乐园假装编程支持者”——这个概念可以追溯到 80 年代后期。但是,当我阅读更多时,我必须承认我已经变得很感兴趣。

  1. 您是否将 FBP 用于实际项目?
  2. 您对于 FBP 的观点是?
  3. FBP有未来吗?

从某种意义上说,这似乎是我们的行业自过程语言出现以来所追求的重用圣杯。

4

10 回答 10

27

1、你有没有在实际项目中使用过FBP?

我们为我们的自动化项目(调度程序、组件接口、一堆组件、DF 语言、DF 编译器、UI)设计并实现了一个 DF 服务器。它是用纯 C++ 编写的,可以在多个类 Unix 系统(Linux x86、MIPS、avr32 等、Mac OSX)上运行。它缺少一些特性,例如复杂的流控制,复杂的线程控制(它只有一个不太高级的组件),所以它只是一个原型,即使它可以工作。我们现在正在开发一个功能齐全的服务器。在实现和使用原型的过程中,我们学到了很多东西。

此外,我们有一天会制作一个可视化编辑器。

2.您对FBP有何看法?

2.1。首先,数据流编程是 终极乐趣

当我遇到数据流编程时,我感觉就像 20 年前,当我第一次遇到编程时。尽管如此,DF 编程与过程/OOP 编程不同,它只是一种编程。有很多东西要发现,甚至是非常简单的东西!很有趣,作为一个经验丰富的程序员,你遇到了一个 DF 问题,这是一个非常非常基本的事情,但你以前完全不知道。所以,如果你跳入 DF 编程,你会觉得自己像个新手程序员,第一次遇到“循环”或“条件”。

2.2. 它只能用于特定的架构

它只是一把锤子,用来敲钉子。DF 不适用于 UI、Web 服务器等。

2.3. 数据流架构对于某些问题是最优的

数据流框架可以创造神奇的东西。它可以并行化最初不是为并行化而设计的程序。组件是单线程的,但是当它们被组织成一个 DF 图时,它们就变成了多线程的。

示例:您知道吗,那个品牌是 DF 系统?尝试make -j(参见 man,-j 的用途)。如果您有多核机器,请在使用和不使用 -j 的情况下编译您的项目,并比较时间。

2.4. 问题的最优拆分

如果您正在编写程序,您通常会将问题拆分为较小的子问题。众所周知的子问题通常有拆分点,您不需要实现,只需使用现有的解决方案,例如用于 DB 的 SQL,或用于图形/动画的 OpenGL 等。

DF 架构以一种非常有趣的方式解决了您的问题:

  • 提供架构的数据流框架(只使用现有的),
  • 组件:程序员创建组件;组件是简单的、分离良好的单元——制作组件很容易;
  • 配置:又名数据流编程:配置器使用程序员提供的组件将数据流图(程序)放在一起。

如果你的组件集设计得很好,配置器可以构建这样的系统,这是程序员做梦都想不到的。配置器可以在不打扰程序员的情况下实现新功能。客户很高兴,因为他们有个性化的解决方案。软件制造商也很高兴,因为他/她不需要维护几个客户特定的软件分支,只需要客户特定的配置。

2.5. 速度

如果系统建立在本地组件上,DF 程序很快。与简单的 OOP 程序相比,唯一的时间损失是组件之间的消息调度,它也是最小的。

3. FBP有前途吗?

是的,当然。

主要原因是它可以解决大量的多处理问题,而无需引入全新的奇怪的软件架构、奇怪的语言。数据流编程很简单,我的意思是:组件编程和数据流配置构建。(即使是数据流框架的编写也不是一门火箭科学。)

此外,它非常经济。如果你有一套好的组件,你只需要把乐高积木放在一起。DF 程序易于维护。DF 配置构建不需要经验丰富的程序员,只需要系统集成商。

我会很高兴,如果本机系统传播开来,为自定义组件创建敞开大门。还应该有一个标准的 DF 语言,这意味着它可以与平台无关的可视化编辑器和多个 DF 服务器一起使用。

于 2010-04-29T08:35:22.070 回答
16

有趣的讨论!昨天我突然想到,部分混淆可能是由于许多不同的符号使用有向弧,但用它们来表示不同的东西。在 FBP 中,线条表示有界缓冲区,数据包流穿过这些缓冲区。由于组件通常是长时间运行的进程,流可能包含大量数据包,并且 FBP 应用程序可以运行很长时间 - 甚至可能“永久”运行(参见 2007 年关于名为 Eon 的项目的论文,主要由 UMass Amherst 的人撰写)。由于当缓冲区(暂时)满(或暂时空)时,向有界缓冲区的发送暂停,因此可以使用有限资源处理无限量的数据。

相比之下,Grafcet 中的 E 来自 Etapes,意思是“步骤”,这是一个完全不同的概念。在这种模型中(并且有很多这样的模型),步骤之间流动的数据要么被限制在一次可以保存在高速内存中,要么必须保存在磁盘上。FBP 还支持网络中的循环,这在基于步骤的系统中很难做到 - 参见例如http://www.jpaulmorrison.com/cgi-bin/wiki.pl?BrokerageApplication- 请注意,此应用程序以自然的方式同时使用了 MQSeries 和 CORBA。此外,FBP 本身是并行的,因此它适用于网格网络、多核机器和许多现代计算方向的编程。最后一点评论:在文献中我发现了很多相关的项目,但很少有项目具备 FBP 的所有特性。可以在http://www.jpaulmorrison.com/cgi-bin/wiki.pl?FlowLikeProjects中找到我多年来积累的列表(其中一些比 Grafcet 更接近)。

于 2009-01-07T16:18:19.373 回答
7

我确实不同意关于 FBP 只是实现 FSM 的一种手段的评论:我认为 FSM 很整洁,并且我相信它们在构建应用程序中具有一定的作用,但是 FBP 的核心概念是多个组件进程异步运行,通过跨越现在称为有界缓冲区的数据块流进行通信。是的,FSM 绝对是构建组件流程的一种方式,事实上,在我关于 FBP 的书中有一整章专门讨论了这个想法,以及相关的 PDA ( 1 ) - http://www.jpaulmorrison.com/ fbp/compil.htm - 但在我看来,实现非平凡 FBP 网络的 FSM 将是不可能的复杂。例如,图中所示的图表 http://www.jpaulmorrison.com/fbp/image010.jpg 约为 a 的 1/3在大型机上运行的单个批处理作业。这些块中的每一个都与所有其他块异步运行。顺便说一句,我很想听到第一篇文章中问题的更多答案!

1 : http://en.wikipedia.org/wiki/Pushdown_automaton下推自动机

于 2009-01-06T19:40:43.100 回答
4

每当我听到基于流的编程这个术语时,我都会从概念上想到 LabView。即,调度的组件进程主要由对其输入数据的更改驱动。这真的是乐高编程,因为 labview 平台被用于最新的头脑风暴产品。但是我不同意这使它成为一个不太有用的编程模型。

对于通常涉及数据收集、控制和自动化的工业系统,它非常适合。如果不是数据输入转换为数据输出,那么任何控制系统是什么?即,如果可以的话,您不希望将控制方案中的哪个组件表示为更大图中的黑匣子。要使用其他方法实现该级别的架构清晰度,您可能必须绘制数据域类图,然后绘制问题域运行时类关系,然后在此之上绘制用例图,并在它们之间来回翻转。使用流驱动系统,您可以足够准确地将大量此类信息整合在一起,这样您就可以在构建和定义组件后真实地直观地设计系统。

在查看用 labview 编写的应用程序时,我从来不必问的一个问题是“哪段代码设置了这个值?”,因为它是固有的,很容易从数据中追溯,而且像多个无意识的编写者这样的错误是不可能的错误地创造。

如果以更典型的程序方式编写的代码也是如此!

于 2009-03-21T02:28:24.467 回答
3

1)我为异常检测项目构建了一个小型 FBP 框架,结果证明这是一个好主意。

您还可以观看一些KNIME 视频,这些视频很好地了解了当框架由一个优秀的团队组合在一起时基于流的框架的感觉。诚然,它是基于批处理的,不是为连续操作而创建的。

然而,到目前为止,基于流的编程最好的例子是UNIX 管道,它是最古老、最容易被忽视的 FBP 框架之一。我认为我不必详细说明 nix 管道的功能......

2) FBP 是一个非常强大的工具,可以解决大量问题。内在的并行性是一个很大的优势,任何 FBP 框架都可以通过使用适配器模块使网络完全透明。智能框架还具有荒谬的容错能力,并且能够在必要时动态重新加载崩溃的模块。概念上的简单性还允许与项目中涉及的每个人进行更清晰的沟通,以及更简洁的代码。

3)绝对!管道将继续存在,并且是 unix 最强大的功能之一。与静态程序相比,FBP 框架固有的强大功能很多,并且微不足道,以至于某些框架可以在运行时重新配置而无需特殊措施。

FBP FTW!;-)

于 2010-12-16T13:07:41.737 回答
3

在汽车开发中,他们有一个与语言无关的消息协议,该协议是 MOST 规范(面向媒体的系统传输)的一部分,旨在通过网络或同一设备内的组件之间进行通信。系统通常既有真实的消息总线也有可视化的消息总线——因此您实际上拥有了一种基于流的编程形式。

这就是几年前让灯泡亮起来并把我带到这里的原因。这确实是一种很棒的工作方式,比传统编程更有趣。消息目录构成了中心规范和参考点。它适用于开发人员和管理人员。即管理能够浏览消息目录而不是查看源。

通过集成日志记录,还可以参考目录以产生可理解的分析,事情可以变得非常高效。我有以这种方式开发商业产品的真实世界经验。我有兴趣更进一步,特别是在工具和 IDE 方面。不幸的是,我认为汽车行业的许多人都忽略了这一点,即这是多么伟大,并且未能在此基础上再接再厉。他们现在被其他时尚分散了注意力,并没有意识到大多数发展远不止物理巴士。

于 2012-12-13T16:56:30.663 回答
2

我在 Java Web 应用程序中广泛使用Spring Web Flow来建模(通常)应用程序进程,这些进程往往是复杂的类似向导的事务,有很多关于显示哪些页面的条件逻辑。它非常强大。添加了一个新产品,我设法在一两个小时内将现有的部分重新切割成一个全新的应用程序流程(添加了几个新的视图/状态)。

我还研究了使用OS Workflow对业务流程进行建模,但该项目因各种原因而被搁置。

在 Microsoft 世界中,您拥有Windows Workflow Foundation(“WWF”),它变得越来越流行,尤其是与Sharepoint结合使用。

FBP 只是一种实现有限状态机的方法。这不是什么新鲜事。

于 2009-01-01T23:05:48.957 回答
2

我意识到这并不完全相同,但这种模型已经在 PLC 编程中使用了多年。ISO 将其称为顺序流程图,但许多人在流行实施后将其称为 Grafcet。它提供并行处理并定义状态之间的转换。

于 2009-01-06T20:18:38.170 回答
0

如今,它在商业智能世界中被用于混搭和处理数据。最终用户可以完成 ETL、查询、加入和生成报告等数据处理步骤。我是开放系统上的开发人员 - ComposableAnalytics.com在 CA 中,可以通过浏览器共享和执行基于流的应用程序。

于 2014-08-22T06:51:26.723 回答
-2

这就是 MQ 系列、MSMQ 和 JMS 的用途。

这是 Web 服务和企业服务总线实现的基石。

TIBCO 和 Sun 的 JCAPS 等产品基本上是基于流的,没有使用这个特殊的流行词。

应用程序的大部分工作是通过通过处理网络传递消息的小模块完成的。

于 2009-01-02T00:43:57.027 回答