首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多核环境中的BufferedReader

问多核环境中的BufferedReader
EN

Stack Overflow用户
提问于 2013-02-27 21:38:27
回答 2查看 172关注 0票数 7

我有8个文件。它们中的每一个大约是1.7 GB。我将这些文件读入一个字节数组,这个操作已经足够快了。

然后读取每个文件,如下所示:

代码语言:javascript
复制
BufferedReader br=new BufferedReader(new InputStreamReader(new ByteArrayInputStream(data))); 

当按顺序使用单个内核进行处理时,大约需要60秒才能完成。然而,当将计算分布在8个独立的核心上时,每个文件所需的时间远远超过60秒。

由于数据都在内存中,并且不执行IO操作,因此我假设每个内核处理单个文件所需的时间不会超过60秒。因此,总共8个文件应该在60秒多一点的时间内完成,但事实并非如此。

我是否遗漏了一些关于BufferedReader行为的信息?或上述代码中使用的任何读取器。

值得一提的是,我首先使用此代码来上传文件:

代码语言:javascript
复制
byte[] content=org.apache.commons.io.FileUtils.readFileToByteArray(new File(filePath));

整个代码看起来像这样:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-27 21:49:41

你实际上是如何“分配计算”的?是否涉及同步?你只是创建了8个线程来读取这8个文件吗?

您在什么平台上运行(linux、windows等)?我以前在windows调度器中看到过看似奇怪的行为,它将单个进程从一个内核移动到另一个内核,试图在内核之间平衡负载。这最终导致了比仅仅允许单个内核比其他内核更多地被利用更慢的性能。

票数 3
EN

Stack Overflow用户

发布于 2013-02-27 21:52:51

你的系统有多少内存在晃动?

8 x 1.7 to,+操作系统开销,这可能意味着虚拟内存/分页必须发挥作用。这显然比RAM慢得多。

我很欣赏你说每个文件都在内存中,但你是否真的有16 an的空闲RAM,或者在抽象层上有更多的内存?

如果上下文切换也必须不断地切换页面,这将解释增加的时间。

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

https://stackoverflow.com/questions/15113496

复制
相关文章

相似问题

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