基于流程编程

在電腦編程中，**基於流程**（flow-based）編程，縮寫為 **FBP**，是一種程式設計範式，它將應用定義為黑箱行程的網路，它們經過預先定義的連接，通過訊息傳遞來交換資料，而這裡的連接是在「外部」指定給行程的。這些黑箱行程不需要更改內部，就可以無盡的重新連接而形成不同的應用。FBP 因而是天然基於構件的。

FBP 是一種特殊形式的資料流程編程，它基於了有界緩衝區，帶有確定生存時間的資訊包，命名埠，和獨立的連接的定義。

## 歷史

基於流程編程由 J. Paul Morrison 在 1970 年代前期發明，最初實現於為加拿大銀行開發的軟體中。FBP 在初起階段受到同期的一些 IBM 類比語言的強烈影響，特別是 GPSS，但是它的根基完全一致於康威關於協程的開創性論文。

## 概念

下列方塊圖展示了 FBP 方塊圖的主要實體（資訊包除外）。這種方塊圖可以直接轉換成一個連接的列表，接著它們可以在適當的引擎（軟體或硬體）上執行：

A、B 和 C 是執行代碼構件的處理器。O1、O2 和兩個 IN 是埠，它們將連接 M 和 N 連結到與它們有關的處理器上。允許處理器 B 和 C 執行相同的代碼，每個處理器必須有自己的工作儲存、控制塊等的集合。不管它們共享代碼與否，B 和 C 自由的使用相同的埠名字，因為埠名字只在參照它們的構件內有意義（當然是在網路層面上）。

M 和 N 經常被稱為「有界緩衝區」，在任何時間點上能持有的資訊包（IP）的數目方面，它們有著固定的能力。

「埠」的概念是為允許同一個構件在一個網路上用在多於一個位置上。結合了叫做初始化資訊包（IIP）的參數化能力，埠向 FBP 提供了構件重用功能，使得 FBP 成為基於構件的架構。FBP 從而展示了 IBM 研究院的 Raoul de Campo 和 Nate Edwards 所稱謂的「可組態的模組化」。

## 參見

* 演員模型
* 交談循序程式
* 並行計算
* 資料流程
* 資料流程圖
* 資料流程編程
* 函數式回應式編程
* Linda (協同運作語言)
* 低程式碼開發平台
* MapReduce
* Node-RED
* 管道編程
* 傑克遜結構化編程

## 參照

## 外部連結

* Razdow, Allen. Building Enterprise Data Refineries. DMReview. December 1997 [2006-07-15]. （原始內容存檔於 2005-03-15）.
* Mayer, Anthony; McGough, Stephen; Gulamali, Murtaza; Young, Laurie; Stanton, Jim; Newhouse, Steven; Darlington, John. Meaning and Behaviour in Grid Oriented Components (PDF). London e-Science Centre, Imperial College of Science, Technology and Medicine. 2002 [2020-05-02]. （原始內容存檔 (PDF) 於 2012-02-04）.
* Black, Andrew P.; Huang, Jie; Koster, Rainer; Walpole, Jonathan; Pu, Calton. Infopipes: An abstraction for multimedia streaming (PDF). Multimedia Systems (Springer-Verlag). 2002, **8** (5): 406–419 [2006-08-10]. doi:10.1007/s005300200062. （原始內容存檔 (PDF) 於 2017-08-12）.
* Kra, David. zSeries and iSeries servers in the grid domain. IBM DeveloperWorks. October 2004 [2006-07-13]. （原始內容存檔於 2005-03-13）.
* Ludäscher, Bertram; Altintas, Ilkay; Berkley, Chad; et al. Scientific Workflow Management and the Kepler System (PDF). San Diego Supercomputer Center. September 2004 [2006-07-14]. （原始內容存檔 (PDF) 於 2017-09-22）.
* Bickle, Jerry; Richardson, Kevin; Smith, Jeff. OMG Software Radio Specification Overview for Robotics (PDF). Object Management Group - Software-Based Communications. 2005 [2006-07-15]. （原始內容存檔 (PDF) 於 2006-07-14）.
* Blažević, Mario. Streaming Component Combinators. Proceedings of Extreme Markup Languages. 2006 [2006-11-09]. （原始內容存檔於 2007-09-18）.
* Kauler, Barry. Flow Design for Embedded Systems, 2nd Edition. R&D Books/Miller Freeman. 1999. ISBN 978-0-87930-555-0.
* US patent 5204965,Guthery, Scott B.; Barth, Paul S. & Barstow, David R.,「Data processing system using stream stores」, 發行於 1993-04-20, 指定於 Schlumberger Technology Corporation
* Morrison, J. Paul. Flow-Based Programming. Application Developers' News. March 2013, (1) [2014-05-25]. （原始內容存檔於 2014-08-08）.
* Staplin, George Peter. Tcl Flow-Based Programming - TFP. 2006 [2010-10-07]. （原始內容存檔於 2020-11-27）.
* Johnston, Wesley M.; Hanna, J. R. Paul; Millar, Richard J. Advances in dataflow programming languages. ACM Computing Surveys. March 2004, **36** (1): 1–34. doi:10.1145/1013208.1013209.
* Koster, Rainer; Black, Andrew P.; Huang, Jie; Walpole, Jonathan; Pu, Calton. Thread transparency in information flow middleware. Software: Practice and Experience. April 2003, **33** (4): 321–349 [2006-12-05]. doi:10.1002/spe.510.
* Stevenson, Tony. Review of "Flow-Based Programming". PC Update, the magazine of Melbourne PC User Group, Australia. February 1995 [2006-12-06]. （原始內容存檔於 2006-09-25）.
* Lea, Doug. Composing Oneway Messages. May 2001 [2006-12-06]. （原始內容存檔於 2006-09-07）.
* Bowers, Shawn; Ludäscher, B.; Ngu, A.H.H.; Critchlow, T. Enabling Scientific Workflow Reuse through Structured Composition of Dataflow and Control-Flow (PDF). SciFlow '06. [2006-12-06]. （原始內容存檔 (PDF) 於 2007-02-05）.
* Sorber, Jacob; Kostadinov, Alexander; Garber, Matthew; Brennan, Matthew; Corner, Mark D.; Berger, Emery D. Eon. Eon: a language and runtime system for perpetual systems. Proceedings of the 5th international conference on Embedded networked sensor systems - Session: Power management. 2007: 161. ISBN 9781595937636. doi:10.1145/1322263.1322279.
* Fiedler, Lars; Dasey, Timothy. Systems and Methods for Composable Analytics. National Technical Information Service. 2014 [2014-04-01]. （原始內容存檔於 2014-08-26）.
* Matt, Carkci. Dataflow and Reactive Programming Systems: A Practical Guide. CreateSpace Independent Publishing Platform. 2014. ISBN 978-1497422445.
* Lampa, Samuel; Dahlö, Martin; Alvarsson, Jonathan; Spjuth, Ola. SciPipe - A workflow library for agile development of complex and dynamic bioinformatics pipelines. bioRxiv. 2018: 380808 [2018-08-02]. doi:10.1101/380808. （原始內容存檔於 2018-08-03）.