【发布时间】:2012-07-19 16:04:30
【问题描述】:
我有一个程序处理大量文件,其中每个文件需要做两件事:首先,读取和处理文件的一部分,然后存储生成的MyFileData。第一部分可以并行,第二部分不能。
按顺序做所有事情都很慢,因为CPU必须等待磁盘,然后它会工作一点,然后发出另一个请求,然后再次等待......
我做了以下
class MyCallable implements Callable<MyFileData> {
MyCallable(File file) {
this.file = file;
}
public MyFileData call() {
return someSlowOperation(file);
}
private final File file;
}
for (File f : files) futures.add(executorService.submit(new MyCallable(f)));
for (Future<MyFileData> f : futures) sequentialOperation(f.get());
它帮助很大。不过,我想改进两点:
【问题讨论】:
-
我相信“Chii”有答案:继续您的并行操作,但将这些结果放入队列(更适合磁盘 IO 的串行性质)以进行磁盘写入。
标签: java multithreading parallel-processing executorservice