Я читаю файл размером 50 ГБ (только для чтения), используя несколько потоков, при этом каждый поток читает последовательный сегмент из файла. Я попробовал два подхода
- Использование файлового канала
- Использование MemoryMappedBuffer, полученного из FileChannel
Я ожидал, что MemoryMappedBuffer превзойдет FileChannel, но FileChannel стабильно работает примерно на 30% лучше.
Я ищу объяснение. Я сопоставляю память по 1 ГБ за раз, и как только она заканчивается, я сопоставляю еще 1 ГБ.
Моя среда: платформа Windows 7, 64-разрядный процессор xeon 2,7 ГГц, 2 процессора.
FileInputStream
и/илиFileOutputStream
с результатами, которые вы видите здесь. Я считаю, что каналы в java.nio всегда были своего рода синонимом буферизации, тогда как более старые классы java.io Stream иногда работали против «голого железа» ввода-вывода ОС. Подробнее см. в этой ветке: stackoverflow .com/questions/1605332/ - person ebyrob   schedule 09.11.2016MappedByteBuffer
должен быть быстрее, чемFileChannel
или дажеFileInputStream
, и есть множество причин, по которым он должен быть медленнее. - person user207421   schedule 09.11.2016