Pipeline (programvara)

Pipelines implementeras ofta i ett multitasking – operativsystem, genom att starta alla element samtidigt som processer och automatiskt betjäna dataläsningsförfrågningarna för varje process med data skrivna av uppströmsprocessen-detta kan kallas en multiprocesserad pipeline. På detta sätt kommer CPU: n att växlas naturligt mellan processerna av schemaläggaren för att minimera dess tomgångstid. I andra vanliga modeller implementeras element som lätta trådar eller som koroutiner för att minska OS-overhead som ofta är involverade i processer. Beroende på operativsystemet kan trådar schemaläggas direkt av operativsystemet eller av en trådhanterare. Coroutines planeras alltid av en coroutine-chef av någon form.

vanligtvis blockerar läs-och skrivförfrågningar operationer, vilket innebär att körningen av källprocessen vid skrivning avbryts tills all data kan skrivas till destinationsprocessen, och på samma sätt avbryts körningen av destinationsprocessen vid läsning tills åtminstone en del av de begärda uppgifterna kan erhållas från källprocessen. Detta kan inte leda till ett dödläge, där båda processerna skulle vänta på obestämd tid för varandra att svara, eftersom minst en av de två processerna snart kommer att få sin begäran servad av operativsystemet och fortsätta att köras.

för prestanda använder de flesta operativsystem som implementerar rör rörbuffertar, vilket gör att källprocessen kan ge mer data än destinationsprocessen för närvarande kan eller vill ta emot. Under de flesta Unices och Unix-liknande operativsystem finns också ett speciellt kommando som implementerar en rörbuffert med potentiellt mycket större och konfigurerbar storlek, vanligtvis kallad ”buffert”. Detta kommando kan vara användbart om destinationsprocessen är betydligt långsammare än källprocessen, men det är ändå önskvärt att källprocessen kan slutföra sin uppgift så snart som möjligt. T. ex. om källprocessen består av ett kommando som läser ett ljudspår från en CD och destinationsprocessen består av ett kommando som komprimerar vågformsljuddata till ett format som MP3. I det här fallet skulle buffring av hela spåret i en rörbuffert göra det möjligt för CD-enheten att snurra ner snabbare och göra det möjligt för användaren att ta bort CD-skivan från enheten innan kodningsprocessen är klar.

ett sådant buffertkommando kan implementeras med hjälp av systemanrop för läsning och skrivning av data. Slösaktig upptagen väntan kan undvikas genom att använda faciliteter som poll eller select eller multithreading.

några anmärkningsvärda exempel på rörledningssystem inkluderar:

  • RaftLib-C / C++ Apache 2.0-licens

Lämna ett svar

Din e-postadress kommer inte publiceras.