Предполагая следующее для...
<Б > Вывод:
Файл открыт...
Данные передаются на диск. Данные в памяти находятся в большом смежном буфере. Он записывается на диск в его исходной форме непосредственно из этого буфера. Размер буфера настраивается, но фиксируется в течение всего потока. Буферы записываются в файл один за другим. Операции поиска не проводятся.
... файл закрыт.
Входной сигнал:
Большой файл (последовательно записанный выше) читается с диска от начала до конца.
Существуют ли общепринятые рекомендации по достижению максимально быстрого последовательного ввода-вывода файлов в С++?
Некоторые возможные соображения:
- Рекомендации по выбору оптимального размера буфера
- Будет ли переносная библиотека, например boost:: asio, слишком абстрагироваться, чтобы выявить тонкости конкретной платформы или их можно считать оптимальными?
- Асинхронный ввод-вывод всегда предпочтительнее синхронного? Что делать, если приложение не связано с ЦП?
Я понимаю, что это будет иметь специфические для платформы соображения. Я приветствую общие рекомендации, а также рекомендации для конкретных платформ.
(мой самый непосредственный интерес к Win x64, но мне также интересны комментарии к Solaris и Linux)