Csővezeték (szoftver)

A csővezetékeket gyakran többfeladatos operációs rendszerben valósítják meg, úgy, hogy az összes elemet a folyamatokkal egyidejűleg indítják el, és automatikusan kiszolgálják az egyes folyamatok adatolvasási kéréseit az upstream folyamat által írt adatokkal – ezt többprocesszoros csővezetéknek nevezhetjük. Ily módon a CPU-t az ütemező természetesen átkapcsolja a folyamatok között, hogy minimalizálja az üresjárati időt. Más általános modellekben az elemeket könnyű szálakként vagy coroutinokként valósítják meg, hogy csökkentsék a folyamatokkal gyakran érintett operációs rendszert. Az operációs rendszertől függően a szálakat közvetlenül az operációs rendszer vagy egy szálkezelő ütemezheti. A coroutinokat mindig valamilyen formában egy coroutine menedzser ütemezi.

általában az olvasási és írási kérések blokkoló műveletek, ami azt jelenti, hogy a forrásfolyamat végrehajtása írás közben felfüggesztésre kerül, amíg az összes adatot be nem lehet írni a célfolyamatba, és hasonlóképpen, a Célfolyamat végrehajtása olvasáskor felfüggesztésre kerül, amíg a kért adatok legalább egy részét meg nem lehet szerezni a forrásfolyamatból. Ez nem vezethet holtponthoz, ahol mindkét folyamat határozatlan ideig Várna egymás válaszára, mivel a két folyamat közül legalább az egyiknek hamarosan az operációs rendszer kiszolgálja a kérését, és továbbra is fut.

a teljesítmény érdekében a csöveket megvalósító legtöbb operációs rendszer csőpuffereket használ, amelyek lehetővé teszik a forrásfolyamat számára, hogy több adatot szolgáltasson, mint amennyit a Célfolyamat jelenleg képes vagy hajlandó fogadni. A legtöbb Unices és Unix-szerű operációs rendszerben egy speciális parancs is rendelkezésre áll, amely egy potenciálisan sokkal nagyobb és konfigurálható méretű csőpuffert valósít meg, amelyet általában “puffernek”neveznek. Ez a parancs akkor lehet hasznos, ha a Célfolyamat lényegesen lassabb, mint a forrásfolyamat, de mindenképpen kívánatos, hogy a forrásfolyamat a lehető leghamarabb elvégezze feladatát. Például, ha a forrásfolyamat egy parancsból áll, amely egy hangsávot olvas fel egy CD-ről, a Célfolyamat pedig egy parancsból áll, amely a hullámforma hangadatait tömöríti olyan formátumba, mint az MP3. Ebben az esetben a teljes sáv pufferelése egy csőpufferben lehetővé tenné a CD-meghajtó gyorsabb centrifugálását, és lehetővé tenné a felhasználó számára, hogy a kódolási folyamat befejezése előtt eltávolítsa a CD-t a meghajtóból.

egy ilyen puffer parancs végrehajtható a rendszerhívások segítségével az adatok olvasására és írására. A pazarló elfoglalt várakozás elkerülhető olyan létesítmények használatával, mint a szavazás vagy a kiválasztás vagy a többszálú.

néhány figyelemre méltó példa a csővezeték szoftverrendszerekre:

  • RaftLib-C/C++ Apache 2.0 licenc

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.