mkfifo - Czy dyskowe operacje we / wy faktycznie występują?


10

Mam 2 aplikacje:

  • Producent (N instancji)
  • Konsument (1 instancja)

Obecnie wypisuję wyniki pośrednie od producentów, a następnie konsument odczytuje te pliki z dysku i daje wynik końcowy .

Chciałbym zminimalizować to I / O, „przesyłając strumieniowo” dane wyjściowe od producentów bezpośrednio do konsumenta.

Natknąłem się na nazwane potoki (mkfifo) i kolejny przykład tutaj . Wygląda świetnie, ale nie mogę ustalić, w jaki sposób jest to faktycznie realizowane? Czy kolejka FIFO jest właśnie buforowana przez plik? Jeśli tak, to prawdopodobnie nie pomogłoby mi to. Chciałbym, aby zawartość była przesyłana strumieniowo „przez pamięć” całkowicie bez użycia dysku. Może nie jest to możliwe w różnych procesach?

Odpowiedzi:


10

Brak dysku we / wy (z wyjątkiem być może podczas nawigacji w systemie plików, aby otworzyć plik FIFO).

Ze strony podręcznika systemu Linux fifo (7) :

Specjalny plik FIFO (nazwany potok) jest podobny do potoku, z tym że jest dostępny jako część systemu plików. [...] Gdy procesy wymieniają dane za pośrednictwem FIFO, jądro przekazuje wszystkie dane wewnętrznie bez zapisywania ich w systemie plików. Tak więc plik specjalny FIFO nie ma zawartości w systemie plików; pozycja systemu plików służy jedynie jako punkt odniesienia, dzięki czemu procesy mogą uzyskać dostęp do potoku przy użyciu nazwy w systemie plików.


Doskonały. Przeczytałem stronę podręcznika użytkownika mkfifo, ale nie pomyślałem o szukaniu strony o „fifo” - Dziękuję!
Jmoney38

3

Tak naprawdę nie ma znaczenia, czy wynik jest faktycznie zapisany na dysku, czy nie, ponieważ jeśli dostępna jest wystarczająca ilość pamięci, i tak zostanie ona zbuforowana i nie zostanie wykonane żadne rzeczywiste We / Wy dysku. Wręcz przeciwnie, jeśli jest on zabezpieczony i pamięć jest niewystarczająca, można go zamienić na dysk.

Gdybym miał zgadywać, powiedziałbym, że potok jest w rzeczywistości oparty na pamięci, ale to powinno zmienić tylko to, czy kolejkowane dane są zachowywane między restartami.

Powinieneś zadbać o to, że ponieważ masz wielu producentów, twoje zapisy muszą być atomowe, aby nie były przeplatane w kolejce. Zobacz man 7 pipeszczegółowe informacje na temat zapewnienia, że ​​zapis jest atomowy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.