日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

管道过滤器

發(fā)布時(shí)間:2024/3/12 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 管道过滤器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

管道-過濾器體系結(jié)構(gòu)模式為處理數(shù)據(jù)流的系統(tǒng)提供了一種結(jié)構(gòu)

工業(yè)中的流處理系統(tǒng)-水處理系統(tǒng)

?

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

?

?

總結(jié)

以上是生活随笔為你收集整理的管道过滤器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。