基于流程的编程

2021-01-21 02:00:34

在计算机编程中,基于流程的编程(FBP)是由J. Paul Rodker Morrison在20年代后期发现/发明的一种编程范例,它使用了数据处理工厂。设计和构建应用程序的隐喻。 FBP将应用程序定义为“黑匣子”的网络。流程,这些流程通过在预定义的连接(认为是传送带)上传输的数据块(称为信息包)进行通信,其中连接是在流程外部指定的。这些黑匣子进程可以无限地重新连接以形成不同的应用程序,而无需在内部进行更改。因此,FBP自然是面向组件的。

FBP是数据流编程的一种特殊情况,其特征是异步,并发进程(在后台),具有定义的生存期的信息包,命名的端口,有界的缓冲区(&B);连接以及组件外部连接的定义-已发现它支持改进的开发时间和可维护性,可重用性,快速原型制作,仿真,改进的性能以及开发人员,维护人员,用户,系统人员和管理人员之间的良好通信-更不用说FBP自然地利用了多个内核……而程序员不必为复杂的多任务处理而苦恼!

FBP展示了“数据耦合”,在有关耦合的文章中描述为组件之间最松散的耦合。松耦合的概念又与面向服务的体系结构有关,并且FBP符合该体系结构的许多标准,尽管比该体系结构的大多数示例更细粒度。

FBP促进了规范的高级功能样式,从而简化了有关系统行为的推理。一个例子是分布式数据流模型,用于建设性地指定和分析分布式多方协议的语义。

FBP涉及重大的“范式转换”。从传统的编程,因为它使用"装配线"数据处理的图像,实际上必须使用它来体验其优势。毫不奇怪,所谓的“冯·诺伊曼”范式已经超越了编程技术,在过去40多年的时间里,许多公司都推出了类似FBP或" FBP启发"的公司。系统(借用由Cloudera的Joe Witt创造的术语),不涉及这种范式转换,包括该行业中一些最大和最成功的公司,例如IBM,Microsoft,Facebook,Google和《纽约时报》 (请参阅FBP外部参考)。不幸的是,如果没有FBP范式转换,这些系统将无法完全实现上面列出的优点,尽管其中大多数将视觉符号与某种程度的组成部分结合在一起。因此,我们被迫使用" classical FBP"引用本网站中描述的FBP架构。对于阅读文档的人来说,很难判断给定的产品是否称自己为“ FBP类”。是“经典”的是否,但大致上,多个输入端口,“背压”和异步性构成了一种石蕊测试,以检查系统是否应分类为“经典”。 FBP系统。尽管FBP范式的转变在一开始可能会带来一些麻烦,但考虑到较旧的编程方法的普遍性,实际上它体现了一个简单的思维模型(不是“简单”的,而是“简单”的,而是“简单”的)。用优雅的话语,例如Joe Witt的话),并且经过数十年的实践证明,这种应用程序比使用常规(von Neumann)范式构建的应用程序更易于理解和维护。

如果您通过NoFlo,Flowhub,Node-RED或类似程序包接触过基于流的程序设计,建议您阅读FBP与受FBP启发的系统,以突出显示FBP固有的差异和相似之处,或"古典"一方面是FBP(本网站的主题),另一方面是NoFlo和其他类似的受FBP启发的"系统。

FBP在J. Paul Morrison的书《基于流程的程序设计:应用程序开发的新方法》(第2版)中进行了描述,该书可以从Amazon的平装本或2 e-书籍格式:Kindle和epub。

在此网页的下方,您会找到许多有用的链接,包括一些视频,这些视频演示了如何使用FBP图表绘制工具DrawFBP。在FBP成立初期,网络是手工编码的,最初我们使用铅笔和纸,然后使用更复杂的图形工具,无论它们是否与FBP软件配合使用都很好。但是,随着良好的图形支持的到来,我们现在有了一个功能强大的图形工具(DrawFBP),并且近年来的重点已经转移到了在线绘制图表,然后生成网络代码(我们可以看到这种进展)。与市场上的其他流程工具)。既然已经将编译和运行函数(用于Java和C#)添加到DrawFBP中,则开发人员可以图形化地进行大量开发,并且可以在线进行。

我们正在“成长”的过程中本教程将通过一系列步骤来向读者介绍FBP的基本概念,这些步骤使用图表工具DrawFBP逐步扩展应用程序图,并在许多步骤中生成并运行代码。

FBP上有一个Google小组,成员将近800,并且最近已经建立了一个Slack频道-如果您有兴趣加入,请点击以下链接:Slack邀请。

世界是异步的-不要试图将我们构建的系统强制构建为同步框架!

一个进程需要具有多个输入端口,并且需要选择从哪个端口接收!

如果某个进程的上游连接已满,则将暂停为它提供数据的进程(除非该连接标记为" DropOldest")("背压)。

此外,还有六个关于DrawFBP的Youtube视频,它们说明了一些基本(经典)FBP概念(我们现在将其称为" FBP启发式"或" FBP -like"系统不一定包含所有这些系统,尽管DrawFBP应该能够支持大多数这些系统):DrawFBP视频#6-使用WebSockets的简单交互式系统,并带有JavaFBP-WebSockets演示(JavaFBP和HTML5)

最后,由Tarvydas-Sanford Controls Inc.首席执行官Paul Tarvydas和Dann Toliver在2013年9月在多伦多举行的一次聚会上的视频演示,其中还包含一些笑话和怀念... Vladimir Sibirov等人撰写的更通用的FBP Wiki旨在涵盖“经典”和“经典”两者。 FBP和FBP启发的方法(仍在开发中)