首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将大文件分割成块,并在单独的线程中处理每个块,加快速度?

将大文件分割成块,并在单独的线程中处理每个块,加快速度?
EN

Stack Overflow用户
提问于 2013-08-11 21:47:25
回答 1查看 585关注 0票数 1

在我测试的Android应用程序中,我需要处理一个大文件,如压缩、加密、擦除编码等.

为了加快进程速度,我生成多个线程,每个线程读取和处理文件的不同部分,最后合并/追加结果。(使用Java NIO)

我已经试过了,而且确实有一些提速,50%或更多取决于所涉及的存储技术。

有许多类似的问题,但他们主要讨论了如何提高I/O速度,因为限制在单旋转硬盘。

但在我的例子中,它是在使用闪存的多核Android设备上。

因此,我不太确定加速是由于并行处理还是由于内存中的缓存。

我的主要问题是:

我做的对吗?(因为我使用的是多核Android设备)

还是这个方法不好?在什么方面不好?

考虑到在其他系统上的互操作性(压缩、加密),这里不需要考虑。

更多详细信息:

我还以某种方式使用了管道的概念。

例如:

( i)顺序压缩,然后加密一个文件将花费10 + 20 =30秒,

( ii)流水线压缩文件的前半部分,压缩完成后立即开始加密。同时,开始压缩文件的下半部分,并在压缩完成后对下半部分进行加密。可能只需要20秒。

(我知道这是个糟糕的例子,但只是为了给出将储存技术应用于管道的想法)

我不确定这一点,但是由于文件的每个块都不依赖于以前的块(没有数据依赖问题),所以应该可以对文件进行流水线处理,对吧?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-11 21:56:48

它是否会真正加速你的程序取决于很多因素。这包括-文件是在RAM中还是在磁盘上?如果它在磁盘上是程序IO绑定还是CPU绑定(如果IO绑定,那么它不会有帮助)?操作系统的调度程序是如何分配线程的呢?它是将线程分配给同一个内核还是多个内核?不同的线程是否需要进行交互(它们会等待太长时间而不会加速或非常错误)?

您的技术对于并行处理来说是相当标准的。无论它对你的应用程序有无好处,都需要大量的实现和检查。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18177046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档