Dyalog APL中的并行会话

时间:2018-02-15 10:55:08

标签: apl dyalog

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

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

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

今天我怎么能或者我会用Dyalog APL或任何其他APL来做这件事,我可以在哪里

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

  • 发送命令或表达

  • 收到结果

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

4 个答案:

答案 0 :(得分:4)

事实上," Old Fashioned" Microsoft Windows下的Dyalog APL仍然通过DDE协议支持共享变量,但它们被认为已被弃用。

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

The documentation for futures and isolates is online,网上有很多视频 - 例如,我们在Dyalog'14处介绍了这些视频:

Video thumbnail
Parallel Programming with Dyalog 14.0 on YouTube

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

最后,如果你想在已经运行的APL进程之间进行通信,那么TCP库" Conga" (它也包含在标准的Dyalog安装中)允许您使用TCP / IP在进程之间传递APL数组,即使进程在不同的机器体系结构上运行也是如此。 Documentation for Conga is also online

答案 1 :(得分:3)

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

答案 2 :(得分:1)

如果你想以老式的方式(并相信我,你没有),那么这里是一个如何做的例子(原则上):

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

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

答案 3 :(得分: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提供了所需的全部功能。