首先,两者mclapply
和parLapply
都在parallel
包中,尽管mclapply
实际上并没有在 Windows 上并行运行。 parLapply
在所有支持的平台上并行运行,但并不总是像mclapply
. doParallel
包与包一起使用,foreach
并充当包的适配器parallel
。
要编写适用于 Windows 和非 Windows 的包,您有多种合理的选择:
- 只需使用
parLapply
,因为它适用于任何地方
parLapply
在 Windows 和mclapply
其他地方使用
doParallel
与_foreach
该doParallel
软件包很方便,因为它可以mclapply
在非 Windows 平台上使用。例如:
library(doParallel)
registerDoParallel()
foreach(i=1:10, .options.snow=list(preschedule=TRUE)) %dopar% {
Sys.sleep(2)
}
这mclapply
在 Linux 和 Mac OS X 上使用,但会在 Windows 上自动在后台创建 PSOCK 集群对象。preschedule=TRUE
(在doParallel
1.0.3中添加)的使用将导致doParallel
在内部使用预调度任务clusterApply
,就像parLapply
.
请注意,如果您显式创建并注册了一个集群对象,那么无论平台如何,都不会mclapply
被使用。它可以正常工作,但可能效率不高。要使用,您必须使用数字参数调用,或者根本不使用参数。mclapply
registerDoParallel
您可以查看boot
包的源代码,了解如何使用mclapply
或parLapply
取决于您的平台。