3

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

使用 q,我只需启动一个服务器来侦听特定端口,例如q -p 8510,然后从另一个 q 会话或其他软件访问它。令人印象深刻的容易。

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

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

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

  • 向它发送命令或表达式

  • 收到结果

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

4

4 回答 4

4

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

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

futures 和 isolates 的文档是在线的,并且有许多在线视频 - 例如,在Dyalog'14上介绍了它们的演讲:

视频缩略图
YouTube 上的 Dyalog 14.0 并行编程

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

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

于 2018-02-15T12:40:06.253 回答
3

好问题!在最近的一次网络研讨会中,Dyalog 的 CXO 说明了一种方法(处理如何轻松设置 Docker 容器在 aws 或其他地方运行您的代码)。隔离物也可能有用 - 参见这个例子。

于 2018-02-15T11:28:28.663 回答
1

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

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

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

于 2018-02-24T13:14:46.053 回答
1

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

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

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

于 2018-02-17T11:50:18.830 回答