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?
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 pipe
szczegółowe informacje na temat zapewnienia, że zapis jest atomowy.źródło