當前位置:
首頁 >
管道过滤器
發布時間:2024/3/12
49
豆豆
管道-過濾器體系結構模式為處理數據流的系統提供了一種結構
–工業中的流處理系統-水處理系統?
–整個系統分為多個處理單元,由管道將多個處理單元連接起來;管道用來輸送流,處理單元用于流的加工和處理;流從一個處理單元出口輸出, 經過管道輸送到下一個處理單元的入口,經過每個處理單元的加工處理,最后由輸出管道輸出到使用地。 ?軟件系統中管道-過濾器結構的應用—操作系統 –UNIX系統中,可以將某個命令的標準輸出與另一命令的標準輸入相連。 ?語法:命令1 | 命令2 | 命令3 | … | 命令N ?例如:ls –l | more –Windows ?Dir? *.exe |?sort > exe.txt –軟件系統中管道-過濾器結構的應用—傳統的語言編譯器 ?結構描述 –數據流的處理過程分成幾個順序執行的處理步驟,每個處理步驟由一個過濾器組件實現。每個過濾器組件有一組輸入和一組輸出。 –每個過濾器組件都會對輸入的數據采用漸進方式進行局部處理,一個過濾器組件的輸出是下一個過濾器的輸入。 –系統的初始數據流由數據源(DataSource)輸入,系統的處理結果數據流輸出到數據池(Data Sink)。 –數據源、過濾器和數據池由管道pipe順序連接起來,每個管道承擔相鄰過濾器之間的數據傳輸。 ?主要組成: –過濾器Filter –數據源Source –數據池Sink –管道Pipe ?過濾器Filter –封裝數據處理功能的功能單元,是管道-過濾器結構中的主要處理單元。 –每個過濾器組件有一組輸入和一組輸出,從連接它的輸入管道中讀取數據,數據經過加工處理,輸出到連接它的輸出管道。 ?過濾器Filter –3種激活方式 ?pull拉出式 –后續組件從當前過濾器中拉出數據。 ?push推入式 –前鄰組件向當前過濾器推入數據。 ?主動過濾器ActiveFilter –激活狀態下,以循環方式不斷從前鄰組件中拉出數據,并向后續組件推入數據。 ?管道Pipe –管道是相鄰過濾器之間的連接。 –連接兩個主動過濾器的管道是一個先進先出的緩沖器,用以完成同步。 –連接被動過濾器的管道可以通過對被動過濾器的調用來實現。 ?數據源DataSource –數據源是系統的輸入。向系統提供相同結構或類型的數據序列。如標準輸入流、文本文件或傳感器采集的數據等。 –數據源可以主動把數據推入過濾器,也可以在過濾器需要數據時被動地提供數據。 ?數據池DataSink –匯集系統處理的結果數據。如文本文件、數據庫、標準輸出等。 –主動數據池把過濾器的結果拉出來,而被動數據池等待過濾器把結果推入進來。 ?實現的主要步驟 1.把系統任務分成幾個獨立的處理階段。 2.定義沿著每個管道傳輸的數據格式。 3.決定管道的連接。 4.設計和實現過濾器。 5.設計出錯處理。 6.建立、處理流水線。 ?步驟1:把系統任務分成幾個獨立的處理階段。 –每個處理階段完成一個獨立的處理功能。 –每個處理階段必須只依賴其前一階段的輸出。 ?步驟2:定義沿著每個管道傳輸的數據格式。 –如果整個系統定義統一的數據格式,則使得過濾器組件的重組變得容易,系統可以獲取極大的靈活性。但是,單一的數據格式在某些情況下,在不同的過濾器組件擇偶觀需要頻繁進行格式轉換,大大降低了系統的數據處理效率。 –如果需要選擇不同的數據格式,又需要一定的靈活性,則需要在系統中建立專門的格式轉換過濾器組件。 ?步驟3:決定管道的連接。 –首先,需要確定把過濾器作為被動過濾器還是主動過濾器來實現。 –被動過濾器的連接簡單,一般直接使用調用來拉出或推入數據即可。需要注意的是,重組和替換過濾器組件時必須設計代碼修改,另外這種過濾器難以獨立開發和測試。 –使用主動過濾器,可以借助管道的同步化分離機制提高系統的靈活性。如果所有的管道都使用這種方式,系統的過濾器可以做到隨意重組。 ?步驟4:設計和實現過濾器。 –過濾器的設計必須同時考慮需要完成的任務,和與它相鄰的管道。 ?如果是被動過濾器,拉入數據可以通過函數(function)實現,推出數據可以通過過程(process)實現。如果是主動過濾器,可以實現為線程(Thread)。 ?在過程1之間和在地址空間之間的數據復制的需要,會影響到系統的性能;因此,管道緩沖區的大小是一個值得考慮的附加參數。在多個關聯轉換和數據復制總開銷一定情況下,使用小的主動過濾器組件,可以獲得較高的靈活性。 ?為了方便重用過濾器組件,需要控制過濾器組件行為時,可以通過下列常用方式將參數傳遞給相應的過濾器組件: –在命令行傳遞參數。 –在啟動過濾器組件時,讓過濾器使用可以訪問得到的全局環境或者倉庫2,這些可以通過操作系統、配置文件或者shell程序來支持實現。 ?設計和實現過濾器時,要注意靈活性和易用性的均衡,一般一個過濾器只需做好一件事即可。 ?步驟5:設計出錯處理。 –管線(pipeline)上的組件不能共享全局狀態,但錯誤可以探測到。 ?例如,在unix系統中,為錯誤消息定義了一個特殊的輸出通道stderr1;但是,當多個過濾器組件并行運行時,stderr會以不可預測的方式混合來自不同過濾器組件的錯誤信息。 –錯誤處理實現比較困難。 ?如果一個過濾器組件在輸入數據中探測到錯誤,它可以忽略后面輸入的數據,直到明確的分隔符出現為止。因此,當可能會有不可預料的輸入數據時,如果允許容忍不精確的結果,這種錯誤處理的方法還是很有效的。 ?重啟系統,希望繼續運行 à再同步問題 à 添加固定標識。 ?步驟6:建立處理流水線 –如果系統只需處理單一任務,可以用一個主程序來創建管道流水線,由主程序調用主動過濾器啟動處理過程。 –增加靈活性: ?通過提供shell程序或用戶終端工具,使用它們從你的過濾器組件集中裝配出不同的流水線。 ?如果允許中間處理結果存放到文件中,并支持把文件作為后續組件的輸入,這樣可以支持流水線的增量式開發。 ?如果系統中的過濾器嚴格限制為單輸入、單輸出,則這種結構的系統被稱為管線或流水線(pipeline)。 ?如果允許過濾器的輸入或輸出多于一個,這種系統的結構可以用一個有向圖表示。這種系統的結構需要經過嚴格的理論分析,以保證系統可以終止和輸出正確結果。 ?在過濾器之間使用命名的管道(如文件)傳送數據,這種系統稱為有名管道。有名管道限制過濾器之間數據傳送只能在命名的管道中,給系統的維護和重組帶來了困難。 ?優點 –系統易于重組,增加了系統的靈活性。 –系統易于更新、升級和維護。 –過濾器組件易于重用。 –并行處理提高了系統的效率。 –支持快速原型系統的設計和實現。 –系統具有清晰的拓撲結構,方便進行某些系統性能的分析。 ?缺點 –管道-過濾器結構會經常導致數據的批處理方式。 –管道-過濾器結構不適合處理交互式應用要求。 –數據轉換增加了系統的開銷和復雜性。 –共享狀態信息代價高且不靈活。 –用并行方式獲得高效率往往不可行。 –難于進行錯誤處理。?
?
總結
- 上一篇: 动作捕捉在动物神经与运动研究领域的应用
- 下一篇: PLC控制技术与组态技术实训装置