Конечно, запись в файл на каждой итерации неэффективна и, скорее всего, замедляет ваши вычисления. (как правило, зависит от вашего актуального случая)
Вы должны использовать производитель -> потребитель шаблон проектирования. Они будут связаны очередью, подобно конвейерной ленте.
- Производитель будет пытаться производить так быстро, как только может, только замедляя, если потребитель не сможет с этим справиться.
- Потребитель будет пытаться «потреблять» как можно быстрее.
Разделив их, вы можете повысить производительность, поскольку каждый процесс проще и имеет меньше помех от других.
- Если производитель работает быстрее, вам нужно улучшить потребителя, в вашем случае, записав в файл наиболее эффективным способом, фрагмент за частью, скорее всего (как вы сказали)
- Если потребитель быстрее, вам нужно улучшить производителя, скорее всего, распараллелив его, как вы сказали.
не нужно для оптимизации обоих. Оптимизируйте только самое медленное (узкое место).
Практически вы используете потоки и синхронизированную очередь между ними. Для подсказок по реализации посмотрите здесь , особенно §18.12 «Шаблон производитель-потребитель».
Что касается управления потоками, вам придется добавить немного больше сложности, выбрав «максимальный размер очереди» и заставив производителей ждать, если в очереди недостаточно места. Остерегайтесь тупиков, закодируйте их внимательно. (см. ссылку на Википедию, которую я дал об этом)
Примечание. Рекомендуется использовать потоки повышения, поскольку потоки не очень переносимы. (ну, они с C ++ 0x, но доступность C ++ 0x пока не очень хорошая)