【发布时间】:2012-12-19 22:37:27
【问题描述】:
现在我正在从事有关数据格式转换的工作。 有一个大文件,比如 10GB,我目前实现的解决方案是逐行读取这个文件,转换每一行的格式,然后输出到一个输出文件。我发现转换过程是一个瓶颈。所以我试图以并发的方式做到这一点。
每一行都是一个完整的单元,与其他行无关。有些行可能会被丢弃,因为该行中的某些特定值不符合需求。
现在我有两个计划:
一个线程从输入文件中逐行读取数据,然后将行放入队列,几个线程从队列中获取行,转换格式,然后将行放入输出队列,最后一个输出线程从输出队列中读取行并写入输出文件。
当前有多个线程从输入文件的不同部分读取数据,然后处理该行并通过输出队列或文件锁输出到文件。
请各位大神给点建议好吗?对此,我真的非常感激。
提前致谢!
【问题讨论】:
-
解决方案 1 更有意义 - 使用多个线程读取/写入文件不会加快进程。
-
(1) 是否必须有一个输出文件,或者是否可以有多个文件,每个文件都包含输出的一部分? (2) 数据在输出文件中出现的顺序是否重要?
-
也许你应该发布你现有的代码。在您尝试复杂的多线程设计之前,最好先了解一下您当前的算法是否经过优化。
-
我们在谈论什么样的处理?行可以乱写吗?
-
@NPE 输出文件中的顺序无关紧要。我尝试将所有数据输出到一个输出文件是因为后续的处理函数接口不支持多个文件作为输入,并且它是一个三部分工具,我无法更改其接口。
标签: java concurrency java.util.concurrent