Я потратил некоторое время на исследование ввода-вывода с отображением памяти для приложения, над которым я работаю.У меня есть несколько очень больших (в масштабе ТБ) файлов, и я хочу отобразить сегменты из них в память для чтения и записи, максимально используя кэширование на уровне ОС.Программное обеспечение, которое я пишу, должно работать под 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"
?Существуют ли другие независимые от платформы библиотеки, которые лучше соответствуют моим требованиям?Должен ли я разработать свою собственную кроссплатформенную библиотеку, чтобы получить такую гибкость?