Rurociąg (oprogramowanie)

rurociągi są często implementowane w wielozadaniowym systemie operacyjnym, uruchamiając wszystkie elementy w tym samym czasie co procesy i automatycznie obsługując żądania odczytu danych przez każdy proces z danymi zapisanymi przez proces upstream – można to nazwać wieloprocesowym rurociągiem. W ten sposób procesor będzie naturalnie przełączany między procesami przez harmonogram, aby zminimalizować jego czas bezczynności. W innych typowych modelach elementy są implementowane jako lekkie wątki lub jako koronki w celu zmniejszenia obciążenia operacyjnego często związanego z procesami. W zależności od systemu operacyjnego wątki mogą być zaplanowane bezpośrednio przez system operacyjny lub przez menedżera wątków. Coroutines są zawsze zaplanowane przez menedżera coroutine jakiejś formie.

Zwykle żądania odczytu i zapisu blokują operacje, co oznacza, że wykonywanie procesu źródłowego po zapisaniu jest zawieszone, dopóki wszystkie dane nie zostaną zapisane do procesu docelowego, a także, podobnie, wykonywanie procesu docelowego po odczytaniu jest zawieszone, dopóki przynajmniej część wymaganych danych nie zostanie uzyskana z procesu źródłowego. Nie może to prowadzić do impasu, w którym oba procesy czekałyby w nieskończoność na odpowiedź, ponieważ co najmniej jeden z dwóch procesów wkrótce potem będzie obsługiwany przez system operacyjny i będzie nadal działał.

dla wydajności większość systemów operacyjnych implementujących rury używa buforów rur, które pozwalają procesowi źródłowemu dostarczyć więcej danych niż proces docelowy jest obecnie w stanie lub chce otrzymać. W większości unice ’ ów i uniksopodobnych Systemów Operacyjnych dostępne jest również specjalne polecenie, które implementuje bufor potoku o potencjalnie znacznie większym i konfigurowalnym rozmiarze, zwykle nazywany „buforem”. Polecenie to może być użyteczne, jeśli proces docelowy jest znacznie wolniejszy niż proces źródłowy, ale i tak jest pożądane, aby proces źródłowy mógł wykonać swoje zadanie tak szybko, jak to możliwe. Na przykład, jeśli proces źródłowy składa się z polecenia, które odczytuje ścieżkę audio z płyty CD, a proces docelowy składa się z polecenia, które kompresuje dane audio kształtu fali do formatu takiego jak MP3. W takim przypadku buforowanie całej ścieżki w buforze rurowym pozwoliłoby napędowi CD szybciej się obracać i umożliwić użytkownikowi wyjęcie płyty CD z napędu przed zakończeniem procesu kodowania.

takie polecenie bufora można zaimplementować za pomocą wywołań systemowych do odczytu i zapisu danych. Nieużytecznego, zajętego oczekiwania można uniknąć, korzystając z takich udogodnień, jak ankieta, wybór lub wielowątkowość.

niektóre godne uwagi przykłady systemów oprogramowania pipeline to:

  • RaftLib – C/C++ Apache 2.0 License

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.