2011-08-29 60 views
14

默认情况下(no .combine),foreach /%dopar%返回列表中的结果。列表中的结果顺序是否保证与循环/迭代的顺序相匹配?换句话说,顺序是否与顺序迭代相同?或者是否在并行任务完成时填充列表?浏览文档,我发现有一个.inorder参数,但它似乎只适用于使用.combine函数。foreach%dopar% - 保证结果的顺序?

回答

21

当通话结束时,foreach的结果将与“正常”循环的顺序相同。但是,他们“到达那里”的顺序并不能保证:理论上(并行化,也是在实践中),第一个项目可能比第二个项目要晚。

因此,您无法保证执行顺序(例如进度条或日志记录可能会被拼凑),但您可以放心,结果将按照您期望的顺序排列。

+1

尼克 - 谢谢!我赞赏执行顺序和结果顺序之间的区别 – SFun28