Если отображаемые данные файла полностью резидентны в физической памяти, будет ли какая-либо польза от чтения данных параллельно, например, путем определения количества секций с байтом начала/конца и иметь отдельный поток, работающий с каждой секцией? Цель состоит в том, чтобы обеспечить частые быстрые чтения данных из большого двоичного файла.Чтение данных из файла с отображением памяти параллельно?
Я провел несколько тестов (Java NIO), где каждый поток (тестирование с 4 потоками) имеет доступ к ссылке mmap, но поскольку каждый поток изменяет внутренний указатель в mmaped-файле, чтобы читать следующий набор байтов, это не кажется безопасным. Я думаю о разделении файла на 4 мм куска для каждой нити?
UPDATE: Чтобы предоставить больше контекста, в конечном счете, то, что я собираюсь сделать, это структура данных, которая будет содержать ссылку на число mmaped файлов, чтобы затем эта ссылка могла быть предоставлена некоторой функции, которая будет выполнять проверку сканирования цикла для значений и помещения их в буфер байтов.
ОБНОВЛЕНИЕ: Это файлы только для чтения.
Это не кажется используйте mmap. Разве этот подход не требовал бы чтения с диска при каждом вызове метода read? –
Да ... в каждом вызове этот код будет читать с диска ... Позвольте мне посмотреть, можно ли это объединить с mmap –
Спасибо, это полезно. Я думаю, в конце концов, может быть, было бы неплохо разделить файл на столько миллиметров, сколько нужно потокам, хранить ссылки на них, а затем каждый раз, когда мне нужно читать, передавайте эти ссылки mmap на runnable. Имеет ли это смысл? –