首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行读写文件是个好主意吗?

问并行读写文件是个好主意吗?
EN

Stack Overflow用户
提问于 2014-02-28 20:08:10
回答 2查看 4.7K关注 0票数 3

我有大量的数据文件来描述大量气象站的天气。这些文件是每小时一次,并包含在按日期分隔的文件中。

例如:

代码语言:javascript
复制
20100101.csv
20100102.csv
20100103.csv
.
.
20140228.csv

我需要按站汇总数据,然后将其写入磁盘。也就是说,对于每个天气文件,我需要提取i站点的数据,然后将其写入磁盘。

产出:

代码语言:javascript
复制
station_001.csv
station_002.csv
.
.
station_999.csv

为了加快速度,我决定使用foreach和doMC包并行读取每天的文件,并在通过站点并行聚合后将站点文件写入磁盘。

更具体地说,我使用foreach读取文件,并使用.combine="rbind"组合它们(我有足够的内存在内存中创建一个巨大的数据集)。之后,我有了另一个foreach循环,在这个循环中,我按站点对数据进行子集,然后写入磁盘。我发现,通过并行读写,我的速度得到了很好的提高。

我的问题是:并行读写是个好主意吗?我确保不同的线程不会读取相同的数据文件或写入同一个站点文件,但是在进行了一些good搜索之后,将i/o任务(例如,我发现对并行输入/输出说不。和在R博客上发表文章,显示并行阅读)并行化似乎不是一个好主意。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-28 20:23:08

Performance Pro

  • 使用多线程可以提高多核机器的性能。

性能Con

  • 从磁盘读取时,CPU性能通常不是瓶颈。磁盘上的文件通常是以尽可能多的顺序块写入的。这意味着旋转磁盘上的指针不必移动到读取下一段。如果您并行执行该任务,则指针必须反复移动以拾取其停止时的位置。这意味着您的磁盘写入速度最终会变慢*。 *固态驱动器可能没有这个问题(我对SSD不太了解,但我认为它们根本不会受到上下文切换的影响)。
票数 5
EN

Stack Overflow用户

发布于 2014-02-28 20:34:50

你说你注意到了性能的提高,所以这对你来说显然是个好主意。

加快速度的其他方法--查看fread in data.table --这将显著提高顺序阅读速度(提高3倍或更多)。使用rbindlist (也来自data.table)来组合也可以提供速度提升(例如使用foreach这里- 用.combine=rbindlist进行研究)。

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

https://stackoverflow.com/questions/22104858

复制
相关文章

相似问题

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