过去几天我一直在Flow Based Programming做一些阅读。有一个wiki提供了更多细节。维基百科也有一个good overview。我的第一个想法是,“伟大的另一个乐高土地假装编程的支持者” - 这个概念可以追溯到80年代后期。但是,当我阅读更多内容时,我必须承认我已经引起了人们的兴趣。
从某种意义上讲,自程序语言出现以来,我们的行业似乎一直在追求重用的圣杯。
答案 0 :(得分:27)
1。您是否将FBP用于实际项目?
我们为自动化项目设计并实现了DF服务器(调度程序,组件接口,一组组件,DF语言,DF编译器,UI)。它是用裸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图时,它们变成了多线程的。
示例:您知道吗 make 是DF系统吗?尝试 make -j (参见man,-j用于什么)。如果您有多核机器,请使用和不使用-j编译项目,并比较时间。
2.4。问题的最佳分割
如果您正在编写程序,则通常会将问题分解为较小的子问题。对于众所周知的子问题,通常有分裂点,您不需要实现,只需使用现有的解决方案,如SQL for DB,或OpenGL用于图形/动画等。
DF架构以一种非常有趣的方式分解您的问题:
如果您的组件集经过精心设计,配置程序可以构建这样的系统,这是程序员从未梦寐以求的。配置程序可以实现新的功能而不会打扰程序员。客户很高兴,因为他们有个性化的解决方案。软件制造商也很高兴,因为他/她不需要维护软件的几个客户特定分支,只需要客户特定的配置。
2.5。速度
如果系统是基于本机组件构建的,则DF程序很快。与简单的OOP程序相比,唯一的时间丢失是组件之间的消息调度,它也是最小的。
3。 FBP有未来吗?
是的,当然。
主要原因是它可以解决大量的多处理问题,而无需引入全新的奇怪软件架构,奇怪的语言。数据流编程很简单,我的意思是:组件编程和数据流配置构建。 (即使数据流框架编写也不是火箭科学。)
此外,它非常经济。如果你有一套好的组件,你只需要将乐高积木放在一起。 DF程序易于维护。 DF配置构建不需要有经验的程序员,只需要系统集成商。
如果原生系统普及,我会很高兴,为自定义组件创建打开了大门。还应该有一个标准的DF语言,这意味着它可以与平台无关的可视化编辑器和几个DF服务器一起使用。
答案 1 :(得分:16)
有趣的讨论!我昨天想到,部分混乱可能是由于许多不同的符号使用有向弧,但使用它们来表示不同的东西。在FBP中,线代表有界缓冲区,数据包的传输流在这些缓冲区之间。由于组件通常是长时间运行的进程,流可能包含大量数据包,FBP应用程序可能运行很长时间 - 甚至可能“永久”运行(参见2007年关于Eon项目的论文,主要是麻省大学阿默斯特分校的人员) )。由于当缓冲区(暂时)满(或暂时为空)时,发送到有界缓冲区会暂停,因此可以使用有限资源处理无限量的数据。
相比之下,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更接近)。
答案 2 :(得分:7)
我不得不不同意关于FBP只是实现FSM的一种方式的评论:我认为FSM很整洁,我相信它们在构建应用程序方面有一定的作用,但FBP的核心概念是多个组件流程运行异步,通过数据流进行通信,这些数据块运行在现在称为有界缓冲区的数据块上。是的,肯定FSM是构建组件流程的一种方式,实际上我的FBP专门讨论了这个想法的一章,以及相关的PDA(1) - http://www.jpaulmorrison.com/fbp/compil.htm - 但在我看来,实施一个非平凡的FBP网络的FSM将是不可能的复杂。作为示例,图中显示了 大约是在大型机上运行的单个批处理作业的1/3。这些块中的每一个都与所有其他块异步运行。顺便说一下,我很想在第一篇文章中听到更多问题的答案!
答案 3 :(得分:4)
每当我听到基于流程编程的术语时,我都会从概念上考虑LabView。即,调度的组件进程主要由其输入数据的更改驱动。这是一个真正的乐高编程,因为labview平台被用于最新一批的心灵风暴产品。但是我不同意这使得它成为一种不太有用的编程模型。
对于通常涉及数据收集,控制和自动化的工业系统,它非常适合。如果不将数据转换为数据,那么任何控制系统是什么?即如果你可以这样做,你的控制方案中的哪个组件你不喜欢在更大的图片中表示为黑盒子。要使用其他方法实现该级别的体系结构清晰度,您可能必须绘制数据域类图,然后是问题域运行时类关系,然后在用例图之上,并在它们之间来回切换。使用流量驱动系统,您可以非常精确地将大量此类信息合并到一起,以便在构建和定义组件后可以直观地设计系统。
在查看用labview编写的应用程序时,我从未问过的一个问题是“什么代码设置了这个值?”,因为它是固有的,很容易从数据中向后追溯,还有像多个无意识的编写者那样的错误不可能错误地创造。
如果只有那种以更典型的程序方式编写的代码才是真的!
答案 4 :(得分:3)
1)我为异常检测项目构建了一个小型FBP框架,结果证明这是一个好主意。
您还可以查看一些KNIME videos,它们可以很好地了解基于流程的框架在由一个优秀团队组建框架时的感觉。不可否认,它是基于批处理的,不是为连续操作而创建的。
到目前为止,基于流程编程的最佳示例是 UNIX管道,这是最古老,最容易被忽视的FBP框架之一。我认为我不必详细说明nix管的力量......
2)FBP是一个非常强大的工具,可以解决大量问题。内在并行性是一个很大的优势,任何FBP框架都可以通过使用适配器模块完全实现网络透明。智能框架也具有荒谬的容错能力,并且能够在必要时动态地重新加载崩溃的模块。概念简洁性还允许与项目中涉及的每个人进行更清晰的沟通,以及更清晰的代码。
3)绝对!管道就在这里,并且是unix最强大的功能之一。与静态程序相比,FBP框架固有的功能很多,并且可以轻微改变,以至于在没有特殊措施的情况下运行时可以重新配置某些框架。
FBP FTW! ; - )强> 的
答案 5 :(得分:3)
在汽车开发领域,他们拥有与语言无关的消息传递协议,该协议是MOST规范(面向媒体的系统传输)的一部分,旨在通过网络或同一设备在组件之间进行通信。系统通常具有真实和可视化的消息总线 - 因此您实际上有一种基于流的编程形式。
这就是几年前让灯泡继续播放并将我带到这里的原因。它真的是一种很棒的工作方式,比传统的编程更有趣。消息目录构成了中央规范和参考点。它适用于开发人员和管理人员。即管理能够浏览消息目录而不是查看源。
通过集成日志记录,还可以引用目录以生成可理解的分析,因此可以提高效率。我有以这种方式开发商业产品的现实经验。我有兴趣进一步研究,特别是在工具和IDE方面。不幸的是,我认为汽车行业的许多人都错过了关于这是多么伟大并且未能在此基础上建立起来的观点。他们现在被其他时尚注意力分散了注意力,并没有意识到,除了物理总线之外,还有更多最的发展。
答案 6 :(得分:2)
我在Java Web应用程序中广泛使用Spring Web Flow来建模(通常)应用程序进程,这些进程往往是复杂的向导式事务,有很多条件逻辑来显示哪些页面。它非常强大。添加了一个新产品,我设法在一两个小时内将现有的碎片重新制作成一个全新的应用程序(添加了几个新的视图/状态)。
我还研究了使用OS Workflow来建模业务流程,但该项目因各种原因而被封装。
在Microsoft世界中,您拥有Windows Workflow Foundation(“WWF”),它越来越受欢迎,特别是与Sharepoint一起使用。
FBP只是实现finite state machine的一种方式。这不是什么新鲜事。
答案 7 :(得分:2)
我意识到它并不完全相同,但这种模型已经在PLC编程中使用了多年。 ISO称之为顺序流程图,但许多人在流行的实现后称之为Grafcet。它提供并行处理并定义状态之间的转换。
答案 8 :(得分:0)
如今,它正在商业智能世界中用于混搭和处理数据。 ETL,查询,加入和生成报告等数据处理步骤可由最终用户完成。我是开放系统的开发人员 - ComposableAnalytics.com在CA中,可以通过浏览器共享和执行基于流的应用程序。
答案 9 :(得分:-2)
这就是MQ Series,MSMQ和JMS的用途。
这是Web服务和企业服务总线实施的基石。
像TIBCO和Sun的JCAPS这样的产品基本上是基于流的,而不使用这个特定的流行语。
应用程序的大部分工作都是使用通过处理网络传递消息的小模块完成的。