管道 (軟體)
来自维基百科,自由的百科全书
管道(pipeline),本源是使用訊息傳遞的行程間通訊機制,它構成自連結起來的處理元素(行程、執行緒、協程和函式等),它們被安置為每個元素的輸出都是下一個元素的輸入;這個名字類比於物理上的管道運輸。在連貫的元素之間,通常會提供一定數量的緩衝區。在管道中流動的資訊,經常是記錄、位元組或位的流(stream),而管道的元素可以叫做過濾器。將元素連接成管道類似於函式複合。在軟體工程中,稱之為管道與過濾器設計模式[1]。
概述
管道的概念是在Unix的發源地貝爾實驗室由Douglas McIlroy在Unix開發期間主張的[2][3]。與Unix的管道有關的更早期獨立工作是Ken Lochner在1960年代為Dartmouth分時系統開發的「通訊檔案」[4][5]。Tony Hoare在1978年提出的交談循序程式(CSP),進一步發展了McIlroy的管道,但它用於通訊的無緩衝區通道不是頭等對象[6]。CMS管道是開始於1980年的將管道想法向IBM的VM/CMS和z/OS系統的移植[7]。
狹窄些說,管道是線性的和單向的,最典型的是Unix shell最初提供的管道語法。但是這個術語有時也應用於更一般性的流(flow)。例如,一個基本上單向的管道,可以有在另一個方向上一些通訊,叫做「返回通道」或「反向通道」,就像在lexer hack中那樣,也有管道可以是完全雙向的。有著單向樹和有向無環圖拓撲的流[8][9],由於沒有環路而相對簡單,使得它們表現得類似於(線性的)管道,因此也可以寬泛的稱為「管道」[10]。
除了基於位元組流(stream)的管道,還有對象管道。在對象管道中,處理元素輸出對象而非文字。Windows PowerShell包含了一種內部的對象管道,在PowerShell執行時系統之內於函式之間傳輸.NET對象。在Limbo程式語言中的通道,是這種隱喻的另一個例子。
管道和過濾器,可以被看作使用位元組流作為資料對象的一種形式的函數式程式設計;更具體的說,它們可以被看作是特定形式的I/O單子[11]。
參見
注釋
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.