私は8つのファイルを持っています。それぞれ約 1.7 GB です。これらのファイルをバイト配列に読み込んでいますが、その操作は十分に高速です。
各ファイルは次のように読み取られます。
BufferedReader br=new BufferedReader(new InputStreamReader(new ByteArrayInputStream(data)));
シーケンシャルな意味で単一のコアを使用して処理すると、完了するまでに約 60 秒かかります。ただし、計算を 8 つの個別のコアに分散すると、ファイルごとに 60 秒よりもはるかに長い時間がかかります。
データはすべてメモリ内にあり、IO 操作は実行されないため、コアごとに 1 つのファイルを処理するのに 60 秒もかからないと推測できます。したがって、合計 8 つのファイルは 60 秒強で完了するはずですが、そうではありません。
BufferedReader の動作について何か不足していますか? または上記のコードで使用されているリーダーのいずれか。
最初にファイルをアップロードするためにこのコードを使用していることに言及する価値があるかもしれません:
byte[] content=org.apache.commons.io.FileUtils.readFileToByteArray(new File(filePath));
全体のコードは次のようになります。
For each file
read the file into a byte[]
add the byte[] to a list
end For
For each item in the list
create a thread and pass a byte[] to it
end For