私のテスト用 Android アプリケーションでは、圧縮、暗号化、消去エンコードなどの大きなファイルを処理する必要があります。プロセス
を高速化するために、複数のスレッドを生成し、各スレッドがファイルの異なる部分を読み取って処理します。ファイルを作成し、最後に結果を一緒にマージ/追加します。(Java NIO を使用)
私はすでにそれを試しましたが、実際には、どのストレージ技術が関係しているかに応じて、50% 以上のスピードアップが見られました。
これには多くの同様のSOの質問がありますが、主に単一回転ハードディスクの制限によりI / O速度が向上しないことについて議論しました。
しかし、私の場合は、フラッシュ メモリを使用するマルチコア Android デバイス上にあります。
したがって、高速化が並列処理によるものなのか、RAM へのキャッシュによるものなのかはよくわかりません。
私の主な質問は次のとおりです。
私は正しいことをしていますか? (私はマルチコアのAndroidデバイスを使用しているため)
またはこの方法は悪いですか?何の点で悪いですか?
ここでは、他のシステムでの相互運用性 (圧縮、暗号化) は問題ではありません。
詳細:
また、どういうわけかパイプラインの概念も使用しています。
例:
i) [シーケンシャル] ファイルを圧縮してから暗号化すると、10 + 20 = 30 秒かかります。
ii) [パイプライン] ファイルの前半を圧縮し、圧縮が完了したらすぐに暗号化を開始します。同時に、ファイルの後半の圧縮を開始し、圧縮が完了したら、最後に後半を暗号化します。20秒しかかからないかもしれません。
(これは悪い例だと思いますが、ストレージ技術をパイプラインに適用するという考えを示すためです) これについてはよくわかり
ませんが、ファイルの各チャンクは前のチャンクに依存しないため (データ依存性の問題はありません)、ファイルのパイプライン処理は問題ないはずです。