我正在测试该parLapplyLB()
功能以了解它如何平衡负载。但我没有看到任何平衡发生。例如,
cl <- parallel::makeCluster(2)
system.time(
parallel::parLapplyLB(cl, 1:4, function(y) {
if (y == 1) {
Sys.sleep(3)
} else {
Sys.sleep(0.5)
}}))
## user system elapsed
## 0.004 0.009 3.511
parallel::stopCluster(cl)
如果它真正平衡负载,则休眠 3 秒的第一个作业(作业 1)将在第一个节点上,而其他三个作业(作业 2:4)将在另一个节点上总共休眠 1.5 秒。总的来说,系统时间应该只有 3 秒。
相反,我认为作业 1 和 2 分配给节点 1,作业 3 和 4 分配给节点 2。这导致总时间为 3 + 0.5 = 3.5 秒。如果我们使用parLapply()
而不是运行上面的相同代码parLapplyLB()
,我们会得到大约 3.5 秒的相同系统时间。
我不理解或做错了什么?