R语言-多线程并行化任务计算(分发计算任务到多个cpu内核)

本文介绍了如何利用R语言的parallel包中的mclapply函数实现并行计算,以提高处理大规模数据的效率。通过设置并发任务数,结合互斥锁同步机制,确保多线程安全地访问共享内存,实现任务的并发执行。示例中展示了如何在单个R进程中创建多个子线程,以并发处理多个单细胞RNA测序数据集的降维运算,充分利用多核CPU资源,达到计算资源的饱和利用。


R语言运行在CPU单核单线程上,提高计算效率可以通过并行包:parallel实现,该包属于base包,不需要额外安装。
parallel::mclapply 函数是 lapply 的并发版本,可以自定义进程数发挥多CPU核心的优势。“mc”代表“多核”,此函数将 lapply 任务分配到多个 CPU 内核创建多线程的形式并发执行。
线程作为进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程的优势是提高应用程序响应;使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。

###step.1创建任务环境各种变量

{
    library(Seurat);library(dplyr);set.seed(123)
    infiles <- dir(path = ".",pattern = "*_raw.rds", full.names = TRUE,recursive = T)
    scRNAlist <- lapply(infiles, readRDS)            #创建数据集list,用于并行运算,本次测试的scRNAlist包含5个数据对象
    rank_i <- bigmemory::big.matrix(1,1,init = 0)    #创建共享内存变量,该变量可被所有线程修改,本测试用此变量统计任务完成顺序
    m <- synchronicity::boost.mutex()                #创建互斥锁,防止共享内存变量被多个线程同时修改引发异常
}

###step.2并行运算任务基于parallel::mclapply函数,通过mc.cores = 3设置同时并发的任务数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倪桦

有帮助的话请杯咖啡吧,谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值