【问题标题】:Parallel sessions in Dyalog APLDyalog APL 中的并行会话
【发布时间】:2018-02-15 10:55:08
【问题描述】:

至少有一种单字母语言(当然是q)具有进程间通信功能,这是一种在多台计算机上并行执行较长时间运行的进程。这些会话可以在同一台计算机上,也可以在不同大陆的服务器上。

使用 q,我只需启动一个服务器来侦听特定端口,例如 q -p 8510,然后从另一个 q 会话或其他软件访问它。非常简单。

我记得,在很久以前,使用带有Shared Variables 的大型机 APL 系统,我可以与另一个用户共享一个变量。这可能是IBM APL.SV。当时我并没有想太多,但几十年后的今天,Shared Variables 听起来像是并行会议的基础。与另一台计算机共享变量。

我今天怎么能或会用 Dyalog APL 或其他任何我可以做到的 APL 做到这一点

  • 在另一台物理计算机上调用 APL 会话

  • 向它发送命令或表达式

  • 收到结果

  • 可能在许多其他计算机上并行执行此操作

【问题讨论】:

    标签: apl dyalog


    【解决方案1】:

    事实上,在 Microsoft Windows 下的 Dyalog APL 中仍然通过 DDE 协议支持“老式”共享变量,但它们被视为已弃用。

    Dyalog APL 的最新版本通过 isolates 支持并行或异步执行,它们是作为活动工作区扩展的独立进程。在隔离中执行的任何表达式都会立即返回一个future。期货可以作为参数传递给函数,并且可以通过结构原语进行操作而不会阻塞;如果它们被传递给需要知道值的原始函数,它们将自动阻塞,直到结果的计算完成。

    The documentation for futures and isolates is online,并且有许多在线视频 - 例如,在Dyalog'14 这里有介绍它们的演讲:


    Parallel Programming with Dyalog 14.0 on YouTube

    在 17.0 版本中,我们将包括对 APLSSH 类的支持,这将使在远程机器上启动隔离变得简单。

    最后,如果您想在已经运行的 APL 进程之间进行通信,TCP 库“Conga”(也包含在标准 Dyalog 安装中)允许您使用 TCP/IP 在进程之间传递 APL 数组,即使这些进程在不同的机器架构上运行。 Documentation for Conga is also online.

    【讨论】:

      【解决方案2】:

      好问题!在recent Webinar Dyalog 的 CXO 中说明了一种方法来做到这一点(处理如何轻松设置 Docker 容器在 aws 或其他地方运行您的代码)。隔离物也可能有用 - 参见 this 示例。

      【讨论】:

        【解决方案3】:

        如果您想以老式方式进行操作(相信我,您不会),那么这里有一个示例(原则上):

        http://svn.savannah.gnu.org/viewvc/apl/trunk/src/testcases/APnnn.tc?view=log

        查看所有文件 APnnn*。在 GNU APL 中,该示例仅适用于在同一台机器上运行的两个 APL 工作区,但对于 IBM APL2,它们可以驻留在不同的机器上。在 IBM 案例中,需要对远程机器上的处理器 ID 进行一些额外配置,因此需要对示例进行一些调整。

        【讨论】:

        • 我会期待像'104.40.211.35' []svo 'CTL'
        【解决方案4】:

        是的,但是 ⎕SVO 来自 IP 地址不常用(甚至不存在)的时代。 ⎕SVO的左边参数是一个“处理器ID”,一个类似于文件描述符的概念。

        GNU APL 遵循 IBM APL2,除了 APL2 允许从本地处理器 ID 到远程处理器 ID 和 IP 地址的映射,该映射(在 APL2 中)作为外部配置文件提供,并且对该配置文件的支持是缺少的位GNU APL。

        在 GNU APL 中,⎕SVO 只是为了与 IBM APL2 向后兼容而提供的,因此扩展其语法没有多大意义。对于新的 APL 应用程序,直接在进程之间使用 UDP 或 TCP 连接要简单得多,⎕FIO 提供了所需的一切。

        【讨论】:

          猜你喜欢
          • 2017-10-29
          • 2017-08-14
          • 2017-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-27
          • 1970-01-01
          • 2023-02-16
          相关资源
          最近更新 更多