分离读/写操作是否提高了程序效率?

时间:2015-06-07 23:41:20

标签: java algorithm performance file-io data-structures

我已经为类编写了一个程序,它从URL中获取数据,解析它的关键短语,然后将短语,行号和列号写入文本文件。

目前我正在将此作为单个操作,其中URL被送到BufferedReader进行读取,送到Scanner for Parsing然后进入循环,其中每行都被梳理,并使用一系列条件语句来检查所述关键短语的存在。找到匹配项后,我会写入文件。

读取的文件大约是60K行文本,从开始到结束运行此完整操作平均需要大约4000ms。拆分任务并首先将文件读入数据结构,然后将结果输出到文件而不是同时执行这两个操作会更有效吗?

此外,从URL中提取数据与在本地读取数据有多大的影响?我可以选择同时做这两种情况,但这取决于我的宽带速度。

编辑:有点不错的测试用例。本周我们改变了ISP,并将宽带速度从6Mb /秒升级到30Mb /秒。这使我的平均读/写/写时间降至1500ms。有趣的是看小差异会如何影响绩效。

1 个答案:

答案 0 :(得分:2)

这取决于您在数据处理部分中实现并行性的方式。

此刻,您按顺序读取所有内容 - 然后处理数据 - 然后写入。因此,即使你把它分成3个线程,每个线程都依赖于前一个的结果。

因此,除非您在完全接收数据之前开始处理数据,否则这不会产生影响,只会增加开销。

您必须为生产者/消费者建模,例如流程单独读取行,然后将其放在工作队列中进行处理。对于已处理的行,然后将其放入要写入文件的队列。

这将允许进行并行读取/处理/写入操作。

顺便说一下 - 可能你大多受限于从URL读取文件的速度,因为所有其他步骤都在本地发生并且速度更快。