【发布时间】:2015-04-23 09:55:00
【问题描述】:
我有一个 1GB 的 zip 文件,其中包含大约 2000 个文本文件。我想尽可能快地读取所有文件和所有行。
try (ZipFile zipFile = new ZipFile("file.zip")) {
zipFile.stream().parallel().forEach(entry -> readAllLines(entry)); //reading with BufferedReader.readLine();
}
结果:stream.parallel() 比普通流快 30-50%。
问题:如果我不使用parallel API 读取流,而是显式触发我自己的线程以从文件中读取,我能否进一步优化性能?
【问题讨论】:
-
难以置信。 ZIP 文件本质上是顺序的。线程在那里无济于事。您将获得的最大性能改进将是通过缓冲。
-
Afaik,最大的缺点是参考实现使用了一段不能多线程工作的本机代码。一旦输入被缓冲,即不是 I/O 占主导地位,这个实现细节将限制并行执行的好处。
标签: java multithreading zip java-8 java-stream