运维开发网

如何在scala中有效地同时处理300个文件

运维开发网 https://www.qedev.com 2020-06-19 20:00 出处:网络 作者:运维开发网整理
我将使用 Scala比较大约300个二进制文件,逐个字节,每个4MB.但是,根据我已经完成的工作,使用java.BufferedInputStream同时处理15个文件在我的机器上花了大约90秒,所以我认为我的解决方案在大量文件方面不会很好. 我们非常感谢您的意见和建议. 编辑:实际任务不只是比较差异,而是以相同的顺序处理这些文件.假设我必须同时查看每个文件中的字节ith,然后继续(第1步). 事
我将使用 Scala比较大约300个二进制文件,逐个字节,每个4MB.但是,根据我已经完成的工作,使用java.BufferedInputStream同时处理15个文件在我的机器上花了大约90秒,所以我认为我的解决方案在大量文件方面不会很好.

我们非常感谢您的意见和建议.

编辑:实际任务不只是比较差异,而是以相同的顺序处理这些文件.假设我必须同时查看每个文件中的字节ith,然后继续(第1步).

事实上,你很沮丧.

让我们看看… 300 * 4 MB = 1.2 GB.这适合你的记忆预算吗?如果是这样,请务必将它们全部读入内存.但是,为了加快速度,您可以尝试以下方法:

>按顺序读取每个文件的512 KB.您可以尝试同时从2到8阅读 – 也许通过期货,并看看它有多好.根据您的I / O系统,您可以通过同时读取几个文件来获得一些速度,但我不希望它扩展太多.实验! BENCHMARK!

>使用Futures处理512 KB.

>返回步骤1,除非您已完成文件.

>从处理期货中获取结果.

在步骤1中,通过限制并行读取,可以避免丢弃I / O子系统.尽可能多地推动它,可能比它少一点,但绝对不会超过它.

通过不读取步骤1中的所有文件,您可以花一些时间阅读这些文件来执行有用的CPU工作.您也可以尝试降低步骤1中读取的字节数.

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号