У меня есть 8 файлов. Каждый из них составляет около 1,7 ГБ. Я читаю эти файлы в байтовый массив, и эта операция выполняется достаточно быстро.BufferedReader в многоядерной среде
Каждый файл читаться следующим образом:
BufferedReader br=new BufferedReader(new InputStreamReader(new ByteArrayInputStream(data)));
При обработке с использованием одного ядра в последовательном смысле занимает Abour 60 секунд. Однако при распределении вычислений по 8 отдельным ядрам требуется гораздо больше 60 секунд на файл.
Поскольку все данные хранятся в памяти и не выполняются операции ввода-вывода, я предположил бы, что для обработки одного файла на ядро требуется не более 60 секунд. Таким образом, всего 8 файлов должны пройти чуть более 60 секунд, но это не так.
Я что-то пропустил в отношении поведения BufferedReader? или любого из читателей, используемых в вышеуказанном коде.
Это может стоит упомянуть, что я использую этот код для первой загрузки файлов:
byte[] content=org.apache.commons.io.FileUtils.readFileToByteArray(new File(filePath));
Код по всем выглядит следующим образом:
For each file
read the file into a byte[]
add the byte[] to a list
end For
For each item in the list
create a thread and pass a byte[] to it
end For
Сколько дисковых накопителей распространяется на файлы? Или все они хранятся на одном диске? –
Для таких больших файлов я настоятельно рекомендую использовать NIO. Пожалуйста, проверьте эту статью: http://www.javalobby.org/java/forums/t17036.html, может быть полезно – n1ckolas
Файлы хранятся в памяти в байте []. дисковые накопители здесь не актуальны. @RJRyV – DotNet