• julia系列6:并行计算


    1 协程/任务

    1.1 定义

    协程也称为任务,如果一个计算以任务的方式执行,那它就很可能会被其他任务中断,原先的任务在恢复后,会从被中断的地方继续工作
    这种过程看似很像函数调用,但有两点不同:1)任务切换不需要任何空间,因此可以完成任意数量任务的切换,而且无需考虑堆栈问题。2)任务切换可以按照任何顺序来进行。
    任务比较适合生产者-消费者模式,一个过程用来生产值,另一个用来消费值。消费者不能简单的调用生产者来得到值,因为两者的执行时间不一定协同,但是在任务中,两者则可以正常运行。

    1.2 Channel

    Julia中提供了Channel来解决生产者消费者的协同问题,其实Channel就是一个FIFO(first-in first-out)队列。使用put!和take!(或是fetch,不删除)函数来具体实现。任务的一个特性就是随着任务的结束,channel对象会自动关闭,无需人为干预。
    如果一个 Channel 是空的,读取的 task(即执行 take! 的task)会被阻塞直到有新的数据准备好了;如果一个 Channel 是满的,那么写入的 task(即执行 put! 的 task)则会被阻塞,直到 Channel 有空余。在控制台里面表现为堵塞住,无法继续执行命令
    isready 可以用来检查一个 channel 中是否有已经准备好的元素,而等待一个元素准备好 则用 wait。
    在这里插入图片描述

    Channel也可以接收一个函数,介绍及示例如下:
    在这里插入图片描述

    在这里插入图片描述
    接下来看下任务的调度。用@task定义,然后用schedule进行调度。
    在这里插入图片描述

    2 线程

    使用Threads.nthreads()查看当前的线程数,默认是启动一个线程。
    使用export JULIA_NUM_THREADS=4(Linux OSX)或set JULIA_NUM_THREADS=4(Windows)来设置启动4个线程。当我们要在Jupyter中使用多个线程时,可以在Julia的运行目录中下打开命令行,先设置线程数,再启动Julia。
    在这里插入图片描述
    其中Ref和[]分别是取地址和引用。
    在这里插入图片描述

    3 进程

    多进程也叫多核心或者分布式处理,就是用一个CPU的多个核心或者多个CPU进行编程。使用julia -p n启动多进程,也可以进入后添加。
    在这里插入图片描述

    Julia 中的分布式编程基于两个基本概念:远程引用(remote references)和远程调用(remote calls)。远程引用是一个对象,任意一个进程可以通过它访问存储在某个特定进程上的对象。远程调用指是某个进程发起的执行函数的请求,该函数会在另一个(也可能是同一个)进程中执行。

    远程引用有两种类型:Future 和 RemoteChannel。

    一次远程调用会返回一个 Future 作为结果。
    远程调用会立即返回;也就是说,执行远程调用的进程接下来会继续执行下一个操作,而远程调用则会在另外的进程中进行。你可以通过对返回的 Future 执行 wait 操作来等待远程调用结束,然后用 fetch 获取结果。

    对于 RemoteChannel 而言,它可以被反复写入。
    例如,多个进程可以通过引用同一个远程 Channel 来协调相互之间的操作。

    每个进程都有一个对应的 id,提供 Julia 交互环境的进程的 id 永远是1。我们把用来执行并行任务的进程称为 “worker”,假如总共只有一个进程,那么进程1就被认为是 worker,否则,除了进程1以外的进程都称作 worker。
    在这里插入图片描述

  • 相关阅读:
    计算机毕业设计ssm电子书店管理系统ya226系统+程序+源码+lw+远程部署
    使用vue-cli脚手架工具搭建vue工程项目以及配置路由
    攻防演习防御体系构建之第一篇之介绍和防守的四个阶段
    MySQL的日志管理、备份和恢复
    nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_port区别
    天选之子Linux是如何发展起来的?为何对全球IT行业的影响如此之大?
    CAD与GIS集成说明(在线CAD结合GIS,webCAD)
    Python - FastAPI 实现 get、post 请求
    数据分析师 医学数据分析 spss ,二项检验的概念和优缺点,适用场景 卡方检验和二相检验的区别
    机器学习笔记之隐马尔可夫模型(一)概率模型背景的阶段性介绍
  • 原文地址:https://blog.csdn.net/kittyzc/article/details/126105429