Определенно попробуйте несколько потоков. При поиске, вероятно, выбрасываются внутренне буферизованные данные (по крайней мере, в процессе, даже если ОС хранит их в кеше), и если сортируемые элементы небольшие, это может быть очень дорого.
Во всяком случае, не должно быть слишком сложно сравнить производительность ваших двух стратегий fstream. Проведите простой эксперимент с k = 2.
Обратите внимание, что может быть ограничение на количество одновременно открытых файлов, которое может иметь один процесс (ulimit -n
). если вы достигнете этого, вы можете рассмотреть возможность использования отдельного потока, но буферизуйте данные из каждого из ваших k блоков вручную.
Возможно, стоит сопоставить файл и использовать несколько указателей, если файл достаточно мал (эквивалентно: ваше адресное пространство достаточно велико).