У меня есть один процесс, который собирает данные в реальном времени, и другой процесс, который их отображает. Два процесса связаны между собой конвейером, причем процесс сбора данных обеспечивает процесс построения графика.
Я оцениваю скорость части сбора данных больше, чем надежность графика. Быстрый skim показывает, что поведение по умолчанию в канале заключается в том, что конец записи и чтения канала демонстрирует поведение блокировки, если партнерский процесс медленнее. Это плохо, потому что процесс сбора данных может ждать в процессе построения графика.
Есть ли способ сделать неблокирующую трубу оболочки а-ля C's O_NONBLOCK? Мне все равно, если одна точка данных не отображается, потому что она перезаписывается более новой точкой ...
РЕДАКТИРОВАТЬ: На самом деле, я думаю, что конвейерный буфер достаточно велик, чтобы хранить выходные данные процесса сбора данных без необходимости немедленной обработки части построения.