我有8个文件。它们中的每一个大约是1.7GB。我正在将这些文件读入一个字节数组,并且该操作足够快。BufferedReader在多核环境下
每个文件然后读取如下:
BufferedReader br=new BufferedReader(new InputStreamReader(new ByteArrayInputStream(data)));
当以顺序的意义上使用的单核处理需要关于云燕60秒时间完成。但是,当通过8个独立核心分配计算时,每个文件需要的时间远远超过60秒。
由于数据都在内存中,并且没有执行IO操作,所以我会假定每个内核处理单个文件的时间不应超过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
分配了多少个磁盘驱动器?或者它们全部存储在同一个驱动器上? – 2013-02-27 13:42:51
对于这样的大文件,我强烈建议使用NIO。 请检查这篇文章:http://www.javalobby.org/java/forums/t17036.html,它可能有帮助 – n1ckolas 2013-02-27 13:44:08
文件在内存中存储在一个字节[]中。磁盘驱动器在这里不相关。 @RJRyV – DotNet 2013-02-27 13:44:29