Первое решение, которое приходит на ум, - это почти то, что вы сказали, - запись на диск в своем собственном процессе с односторонним каналом от сима к записывающему устройству. Автор делает запись максимально быстро (получение новых данных с конвейера). Проблема в том, что если сим будет слишком далеко опережать писателя, сим все равно будет блокировать запись в трубу, и он будет привязан к вводу / выводу при одном удалении.
Проблема в том, что на самом деле ваш цикл симуляции не завершен, пока он не выплюнет результаты.
Второе, что приходит мне в голову, - это использовать неблокирующий ввод / вывод. Всякий раз, когда сим должен писать, он должен делать это через неблокирующий ввод / вывод. При следующей необходимости записи он может получить результаты предыдущей операции ввода-вывода (возможно, с небольшим ожиданием) перед запуском новой. Это позволяет симуляции работать максимально параллельно с вводом / выводом, не позволяя симуляции опередить процесс записи.
Первое решение было бы лучше, если цикл обработки симуляции изменяется (иногда меньше, чем время записи, иногда дольше), потому что в среднем записи могут идти в ногу с симом.
Если цикл обработки всегда (или почти всегда) будет короче времени записи
тогда вы могли бы также не беспокоиться о трубе и просто использовать неблокирующий ввод / вывод, потому что если вы используете трубу, она в конечном итоге заполнится, и сим все равно будет зависать на вводе / выводе.