考虑以下代码块:
library(data.table)
library(parallel)
random_function<-function(i){
n<-1000000
big_list<-list("vector")
for (k in 1:100){
big_list[[k]]<-data.table(rnorm(n),rnorm(n))
}
rbindlist(big_list,use.names = TRUE,fill=TRUE)
}
cl<-makeCluster(8)
clusterExport(cl,"random_function")
clusterCall(cl,function()library(data.table))
parLapply(cl,1:1000,random_function)
stopCluster(cl)
当我在有36个线程的计算机上运行它时,所有线程突然都被激活(即,我在创建集群时指定的8个线程超过了100%的负载)。
这仅在data.table 1.12.0中发生。一切都与data.table_1.11.8完美配合。这是一个错误还是我做错了什么?看来问题出在rbindlist之内,也就是说,如果我不将其放在函数rbindlist中,则我的8个线程的负载不会超过100%。
这是我的会话信息:
> sessionInfo()
R version 3.5.2 (2018-12-20)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.2 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.12.0
loaded via a namespace (and not attached):
[1] compiler_3.5.2 tools_3.5.2