Я потратил некоторое время на исследование IO памяти, предназначенное для приложения, над которым я работаю. У меня есть очень большие (TB scale) файлы, и я хочу отображать сегменты из них в память, как для чтения, так и для записи, максимально используя кэширование на уровне ОС. Программное обеспечение, которое я пишу, должно работать под Unix/Linux и Windows... производительность имеет решающее значение.
Я обнаружил boost::iostreams::mapped_file_source
и boost::iostreams::mapped_file_sink
, которые предоставляют большинство объектов, которые я ищу. Услуги, которые мне бы хотелось, но не нашли:
- Принуждение синхронизации записанных данных на диск (
msync
(2) в Unix;FlushViewOfFile
в Windows) - Блокировка файлов для предотвращения двух процессов, пытающихся одновременно записать один и тот же файл (или читать, пока файл все еще записывается..)
- Управление атрибутами файла во время создания (Unix)
Могу ли я делать это с помощью "boost/iostreams/device/mapped_file.hpp"
? Существуют ли другие независимые от платформы библиотеки, которые лучше подходят моим требованиям? Должен ли я разрабатывать собственную библиотеку кросс-платформенного, чтобы получить эту гибкость?