Filtre și tuburi

În arhitectura computerului , un sistem în stilul filtrelor și tuburilor ( țevi și filtre englezești ) este compus dintr-o rețea de unități autonome (filtre) care efectuează transformări ale informațiilor transmise de o rețea de conexiuni (tuburi).

În această construcție, care imită cea a unei fabrici chimice, fiecare filtru are intrări și ieșiri la care sunt conectate tuburile. Filtrul citește informațiile de intrare, efectuează o transformare și apoi scoate rezultatul. Procesarea se face bit cu bit, iar filtrul produce rezultate înainte de a consuma toate informațiile de intrare. Filtrele comunică între ele numai prin tuburi și niciun filtru nu știe identitatea filtrului care este conectat la celălalt capăt al tubului.

Cea mai cunoscută implementare este cea a sistemului de operare Unix : Interpretul de comenzi ( shell Unix ) include o notație care permite conectarea mai multor comenzi sub forma unei rețele de filtre și conducte. Construcția filtrului și a tubului este, de asemenea, utilizată pentru compilatoare , instrumente digitale de procesare a semnalului și calcul paralel .

Tehnic

Stilul de filtru și tub este similar cu o instalație chimică. În care filtrele provoacă reacții chimice asupra materialelor transportate de tuburi. În stilul filtru și tub, o serie de tuburi transportă informații care sunt procesate de filtre.

Rețeaua de filtrare poate fi liniară ( conductă ), poate include și bucle sau ramuri. Filtrele funcționează în mod asincron și au informații partajate puține sau deloc. Schimbul de informații prin tuburi este cel care sincronizează operațiunile. Informațiile pot fi împinse în tuburi sau aspirate: în primul caz (împins) filtrul sursă depune informații și acest lucru provoacă prelucrarea de către filtrul colector; în al doilea caz (aspirat) filtrul de colectare solicită informații și acest lucru determină procesarea de către filtrul sursă.

Stilul de filtru și tub este potrivit pentru procesarea fluxurilor de date, un tip de utilizare pentru care stilul clasic întrebare-răspuns este de obicei inaplicabil. Fluxul de date ar trebui să fie conceput astfel încât să poată fi citit, procesat și scris în blocuri mici, mai degrabă decât o operație sau bit cu bit, astfel încât să crească randamentul.

Operația care trebuie efectuată este împărțită în mai multe tratamente efectuate de unități autonome conectate împreună la o rețea de tuburi. Fiecare filtru consumă și produce informații în mod incremental, iar rezultatul produs de un filtru este consumat de următorul filtru. Filtrele sunt decuplate prin utilizarea memoriei tampon care reține informațiile schimbate.

Avantaje și dezavantaje

Arhitectura de filtru și tub este ușor de descris, înțeles și implementat. Este posibil să creați o interfață grafică care vă permite să manipulați interactiv filtrele și tuburile. Filtrele fiind independente, această construcție permite paralelismul și calculul distribuit .

Dezavantajele acestei arhitecturi sunt că este dificil de implementat iterații : informațiile trimise în tuburi nu permit să se cunoască de câte ori a fost efectuată operația. Și pentru că fiecare informație de ieșire trebuie transmisă la intrarea unui alt filtru, copierea frecventă a unei cantități mari de informații poate pierde timp. În plus, filtrele sunt proiectate să fie unități strict independente care nu împărtășesc informații de stare, iar arhitectura filtrelor și tuburilor nu oferă un mecanism de reconfigurare a fluxului în timpul procesării.

Avantajele de performanță ale acestei construcții sunt că permite cu ușurință efectuarea prelucrării în paralel, ceea ce îmbunătățește, în general, performanța. Tuburile singure asigură comunicații între filtre, dependențele dintre filtre sunt astfel reduse, ceea ce reduce numărul de operațiuni de sincronizare. Împărțirea prin filtre poate fi totuși un dezavantaj: dacă tratamentele filtrelor se efectuează pe cantități mici de date, acest lucru mărește numărul de comutatoare de context , ceea ce are un impact negativ asupra performanței.

Din punct de vedere al mentenabilității există și avantaje și dezavantaje: Transformarea rețelei de filtre și tuburi este ușoară și este posibilă modificarea acestei rețele în timpul tratamentelor. O nouă funcționalitate poate fi furnizată prin adăugarea de filtre noi și schimbarea rețelei. Cu toate acestea, o modificare a funcționalității necesită adesea modificarea mai multor filtre. În practică, sistemele schimbă de obicei obiecte care reprezintă entități din lumea reală, iar acceptarea unei modificări a obiectului necesită adesea schimbarea mai multor filtre care lucrează pe acel obiect.

Fiabilitatea construcției unui filtru și a unui tub depinde de topologia rețelei de tuburi. Succesul unei operații depinde de succesul tuturor filtrelor implicate în acea operație. Spre deosebire de alte construcții în care componenta primară poate da un rezultat chiar dacă componentele secundare au eșuat.

Utilizări

Cea mai cunoscută implementare a acestui stil se află în sistemul de operare Unix , în special în interpretul său de comandă . Comenzi precum pisică , grep , sed și awk pot fi interconectate prin tuburi .

Un alt exemplu este construcția standard a unui compilator : de obicei acesta este compus din diferite filtre care efectuează analize lexicale , analizând apoi analiza semantică și conductele transportă un flux de litere, de cuvinte și simboluri.

Jitter este o bibliotecă software în arhitectura de filtre și tuburi care procesează imagini raster, audio, imagini 3D.

DirectShow , de la Microsoft , este o bibliotecă de redare media cu arhitectură cu filtru și tub.

Khoros este o bibliotecă digitală de procesare a semnalului în arhitectură de filtre și tuburi.

Note și referințe

  1. (în) Vincenzo Ambriola, Genoveffa Tortora, Progrese în ingineria software și ingineria cunoștințelor , World Scientific - 1993 ( ISBN  9789810215941 )
  2. (ro) Jan Bosch, Proiectarea și utilizarea arhitecturilor software: adoptarea și dezvoltarea unei abordări a liniei de produse , Pearson Education - 2000, ( ISBN  9780201674941 )
  3. (în) Frank Buschmann, Kevlin Henney, Douglas C. Schmidt, Pattern-Oriented Software Architecture: A Pattern Language for Distributed Computing , John Wiley & Sons - 2007 ( ISBN  9780470059029 )
  4. (en) Branislav Kisačanin, Shuvra S. Bhattacharya, Sek Chai, Embedded computer vision , Springer - 2009, ( ISBN  9781848003033 )
  5. (în) William Crawford, Jonathan Kaplan, J2EE design patterns , O'Reilly Media Inc. - 2003 ( ISBN  9780596004279 )
  6. (în) Oliver Vogel Ingo Arnold, Arif Chughtai Timo Kehrer, Software Architecture: A Comprehensive Framework and Guide for Practitioners , Springer - 2011 ( ISBN  9783642197352 )