|
|
一個(gè)典型的管道過(guò)濾器體系結(jié)構(gòu)的例子是以Unix shell編寫的程序。Unix既提供一種符號(hào),以連接各組成部分(Unix的進(jìn)程),又提供某種進(jìn)程運(yùn)行時(shí)機(jī)制以實(shí)現(xiàn)管道。另一個(gè)例子是傳統(tǒng)的編譯器。傳統(tǒng)的編譯器一直被認(rèn)為是一種管道系統(tǒng),在該系統(tǒng)中,一個(gè)階段(包括詞法分析、語(yǔ)法分析、語(yǔ)義分析和代碼生成)的輸出是另一個(gè)階段的輸入。
管道過(guò)濾器體系結(jié)構(gòu)具有許多很好的特點(diǎn):(1)使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低禍合的特點(diǎn);(2)允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入/輸出行為看成是多個(gè)過(guò)濾器的行為的簡(jiǎn)單合成;(3)支持軟件重用。重要提供適合在兩個(gè)過(guò)濾器之間傳送的數(shù)據(jù),任何兩個(gè)過(guò)濾器都可被連接起來(lái);(4)系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡(jiǎn)單。新的過(guò)濾器可以添加到現(xiàn)有系統(tǒng)中來(lái);舊的可以被改進(jìn)的過(guò)濾器替換掉;(5)允許對(duì)一些如吞吐量、死鎖等屬性的分析;(6)支持并行執(zhí)行。每個(gè)過(guò)濾器是作為一個(gè)單獨(dú)的任務(wù)完成,因此可與其它任務(wù)并行執(zhí)行;
但是,這樣的系統(tǒng)也存在著若干不利因素:(1)通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)。這是因?yàn)殡m然過(guò)濾器可增量式地處理數(shù)據(jù),但它們是獨(dú)立的,所以設(shè)計(jì)者必須將每個(gè)過(guò)濾器看成一個(gè)完整的從輸入到輸出的轉(zhuǎn)換。(2)不適合處理交互的應(yīng)用。當(dāng)需要增量地顯示改變時(shí),這個(gè)問(wèn)題尤為嚴(yán)重。(3)因?yàn)樵跀?shù)據(jù)傳輸上沒(méi)有通用的標(biāo)準(zhǔn),每個(gè)過(guò)濾器都增加了解析和合成數(shù)據(jù)的工作,這樣可以導(dǎo)致了系統(tǒng)性能下降,并增加了編寫管道過(guò)濾器的復(fù)雜性。綜合分析現(xiàn)有管道一過(guò)濾器體系結(jié)構(gòu)的研究成果,可以發(fā)現(xiàn)管道一過(guò)濾器體系結(jié)構(gòu)沒(méi)有給出管道和過(guò)濾器如何組裝以實(shí)現(xiàn)系統(tǒng)的方法,也沒(méi)有給出管道過(guò)濾器通過(guò)管道進(jìn)行數(shù)據(jù)傳輸?shù)姆绞?/span>,而且對(duì)過(guò)濾器和管道各自內(nèi)部結(jié)構(gòu)沒(méi)有清晰的描述,因此可以認(rèn)為管道一過(guò)濾器體系結(jié)構(gòu)沒(méi)有深入對(duì)管道一過(guò)濾器本質(zhì)進(jìn)行揭示。
在管道過(guò)濾器軟件體系結(jié)構(gòu)中,每個(gè)模塊都有一組輸入和一組輸出。每個(gè)模塊從它的輸入端接收輸入數(shù)據(jù)流,在其內(nèi)部經(jīng)過(guò)處理后,按照標(biāo)準(zhǔn)的順序,將結(jié)果數(shù)據(jù)流送到輸出端,以達(dá)到傳遞一組完整的計(jì)算結(jié)果實(shí)例的目的。通常情況下,可以通過(guò)對(duì)輸入數(shù)據(jù)流進(jìn)行局部變換,并采用漸進(jìn)式計(jì)算方法,在未處理完所有輸入數(shù)據(jù)以前,就可以產(chǎn)生部分計(jì)算結(jié)果,并將其送到輸出端口(類似于流水線結(jié)構(gòu))。因此,稱這種模塊為“過(guò)濾器”。在這種結(jié)構(gòu)中,各模塊之間的連接器充當(dāng)了數(shù)據(jù)流的導(dǎo)管,將一個(gè)過(guò)濾器的輸出傳到下一個(gè)過(guò)濾器的輸入端。所以,這種連接器稱為“管道”。
更多管道過(guò)濾器相關(guān)內(nèi)容來(lái)源于:http://www.hbtybwg.com/gdglq/gdglq1.html
|