【发布时间】:2015-06-12 21:37:22
【问题描述】:
下面是我尝试在并行流和普通流中处理从文件中读取的行的代码。令人惊讶的是,并行流比普通流没有任何改进。我在这里错过了什么吗?
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));
}
}
});
【问题讨论】:
-
在这种情况下,瓶颈在于 I/O 源 - 如果您有一个物理硬盘驱动器,那么您可以随心所欲地并行化,它不会变得更快......
-
也许不是在行上并行化,而是在文件上并行化
标签: multithreading java-8 java-stream