mkfifo - Чи відбувається насправді введення / виведення диска?


10

У мене є 2 програми:

  • Виробник (N екземплярів)
  • Споживач (1 примірник)

В даний час я виписую проміжні результати від виробників, а потім споживач читає ці файли з диска і видає кінцевий результат.

Я хотів би мінімізувати цей введення-виведення шляхом "потокового" виведення продукції від виробників безпосередньо до споживача.

Я натрапив на названі труби (mkfifo) та наступний приклад тут . Це виглядає чудово, але що я не можу визначити, як це реально реалізується? Чи черга FIFO просто завантажується через файл? Якщо так, то, напевно, мені це не допоможе. Я хотів би, щоб вміст повністю "через пам'ять" пройшло без використання диска. Можливо, це неможливо в різних процесах?

Відповіді:


10

Немає дискового вводу / виводу (за винятком, можливо, при навігації по файловій системі для відкриття файлу fifo.)

З чоловічої сторінки Linux fifo (7) :

Спеціальний файл FIFO (названа труба) схожий на трубу, за винятком того, що до нього доступ є частиною файлової системи. [...] Коли процеси обмінюються даними через FIFO, ядро ​​передає всі дані внутрішньо, не записуючи їх у файлову систему. Таким чином, спеціальний файл FIFO не містить вмісту у файловій системі; запис файлової системи служить лише опорною точкою, щоб процеси могли отримати доступ до труби, використовуючи ім'я у файловій системі.


Ідеально. Я читав сторінку man для mkfifo, але не думав шукати сторінку на "fifo" - Дякую!
Jmoney38

3

Насправді не важливо, чи є ваш результат фактично підкріплений на диску чи ні, тому що, якщо буде достатньо пам'яті, він все одно буде кешований і фактичний диск IO не виконується. Навпаки, якщо він підтримується пам’яттю і недостатньо пам’яті, його можна перенести на диск.

Якби я здогадувався, я б сказав, що труба насправді заснована на пам'яті, але тоді це повинно змінити лише збереження даних черги між перезавантаженнями.

Що ви повинні подбати про те, що оскільки у вас є кілька виробників, ваші записи повинні бути атомними, щоб вони не переплутувались у черзі. Дивіться man 7 pipeдетальну інформацію про те, як переконатися, що запис є атомним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.