Я планирую использовать именованные каналы Unix (mkfifo) для простого обмена сообщениями с несколькими процессами. Сообщение будет всего лишь одной строкой текста.Препятствия для обмена сообщениями FIFO (named pipe)
Не могли бы вы отговорить меня от этого? Какие препятствия я должен ожидать?
Я заметил эти ограничения:
- Отправитель не может продолжаться, пока сообщение не будет получено.
- Приемник заблокирован до тех пор, пока не появится некоторая информация. Неблокирующий IO был бы необходим , когда нам нужно остановить чтение. Например, может потребоваться другой поток.
- Приемник может получать много сообщений в одном чтении. Они должны быть обработаны перед отъездом.
- Максимальная длина атомного сообщения ограничена 4096 байтами. Это ограничение PIPE_BUF для Linux (см. Man 7 pipe).
Я реализую обмен сообщениями в Python. Но препятствия вообще сохраняются.
Сколько процессов вы ожидаете использовать в то же время? Если у вас более одного читателя, письменное сообщение будет видно только одному из читателей AFAIR. (Не на 100% уверены в этом) – rodion
@rodion - Да, он предназначен для просмотра сообщения только в одном читателе. FIFO работает именно так. –
Почему проблема с блокировкой? Я вижу неблокирующую запись. Я не вижу смысла неблокирующего чтения, когда вы ждете работы. –