Ниже приведен код, где я пытаюсь обрабатывать строки, считанные из файла в параллельном потоке и в обычном потоке. Удивительно, но параллельный поток не улучшает нормальный поток. Я что-то упустил?Параллельный поток создает только один поток и дает результат так же быстро, как обычный поток.
Files.walk(Paths.get(tweetFilePath + LocalDate.now())).forEach(
filePath -> {
if (Files.isRegularFile(filePath) && !filePath.toString().endsWith(".DS_Store")) {
long startTime = System.currentTimeMillis();
try {
Files.lines(filePath).parallel().forEach(line -> {
try {
System.out.println(line);
} catch (Exception e) {
System.out.println("Not able to crunch"+ e);
}
});
} catch (Exception e) {
System.out.println("Bad line in file ");
}finally {
System.out.println("total time required:" + (System.currentTimeMillis() - startTime));
}
}
});
В этой ситуации узким местом является источник ввода-вывода - если у вас есть один физический жесткий диск, то вы можете параллелизировать, сколько хотите, оно не будет идти быстрее ... – assylias
возможно вместо распараллеливания на линиях, которые вы могли бы Распараллеливать файлы – the8472