Я пытаюсь добавить асинхронный вывод в мою программу.
В настоящее время у меня есть класс eventManager, который уведомляет каждый кадр о позиции любого из подвижных объектов, присутствующих в настоящее время в основном цикле (это рендеринг сцены; некоторые объекты меняются от кадра к кадру, другие статичны и присутствуют в каждый кадр). Я хочу записать состояние каждого кадра, чтобы добавить функции для воспроизведения сцены.
Это означает, что мне нужно сохранять изменяющуюся информацию от кадра к кадру и либо сохранять ее в памяти, либо записывать ее на диск для последующего поиска и анализа.
Я провел несколько временных экспериментов, и запись состояния каждого объекта в памяти увеличила время на кадр примерно на 25% (не говоря уже о возможности в конечном итоге достичь лимита памяти). Непосредственная запись каждого кадра на диск занимает (как и ожидалось) даже больше, почти вдвое дольше, чем запись всех кадров вообще.
Само собой разумеется, я хотел бы реализовать многопоточность, чтобы не терять количество кадров в секунду в моем основном цикле рендеринга, потому что процесс постоянно записывает на диск.
Мне было интересно, можно ли использовать обычную очередь для этой задачи или мне нужно что-то более выделенное, например, очереди, обсуждаемые в этом вопросе .
В моей ситуации есть только один производитель (основной поток) и один потребитель (поток, который я хочу асинхронно записывать на диск). Производитель никогда не удалит из очереди, а потребитель никогда не добавит к ней - так мне вообще нужна специализированная очередь?
Есть ли преимущество в использовании более специализированной очереди в любом случае ?