Я тестирую функцию 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)
Если бы это была действительно балансировка нагрузки, первое задание (задание 1), которое будет спать в течение 3 секунд, будет на первом node, а остальные три задания (задания 2: 4) будут спать в общей сложности 1,5 секунды с другой node. В общем, системное время должно быть всего 3 секунды.
Вместо этого я думаю, что задания 1 и 2 даны node 1, а задания 3 и 4 даются node 2. В результате общее время составляет 3 + 0,5 = 3,5 секунды. Если мы запускаем тот же код выше с parLapply()
вместо parLapplyLB()
, мы получаем то же самое системное время около 3,5 секунд.
Что я не понимаю и не делаю неправильно?