此为 Mathematica 4 文档,内容基于更早版本的 Wolfram 语言
查看最新文档(版本11.1)

2.12.6 用 MathLink 进行 Mathematica 进程间的通讯

Mathematica 进程间的 MathLink 连接

Session A

这里开始一个 8000 端口的链接

Session B

这里连接到 8000 端口的链接上

Session A

计算 15! 并将其写入该链接

Session B

从这个链接读入,得到送来的 15!

这里将数据回写到链接

Session A

这里读入从进程 B 写出的数据

Mathematica 进程间 MathLink 连接的一个用途就是不使用中间 文件而传输数据.
另一个用途就是把一个计算的不同部分分配到不同的进程中去.

Session A

这里写表达式 2+2,不计算它

Session B

从链接读这个表达式,立即把它放在 Hold

计算这个表达式

调用 LinkWrite 时,它向 MathLink 连接写入一个表达式,并立即返回. 但调用 LinkRead 时,直到从 MathLink 读入一个完整的表达式后才返回.
通过调用 LinkReadyQ[link] 可以知道是否有要读入的内容已准备好. 当 LinkReadQ 返回 True 时,就可以安全地调用 LinkRead 开始立即读入一个 表达式. 但如果 LinkReadQ 返回 False 时,则在另一个 Mathematica 进程中用 LinkWrite 写入一个要读的表达式之前 LinkRead 是锁住的.

Session A

在链接中没有要读入的内容在等待,这时调用 LinkRead 时它就锁住

Session B

这里向链接写入一个表达式

Session A

此时在链接中有一个表达式待续

这时调用 LinkRead 时就不担心它锁住

建立 MathLink 链接的途径

MathLink 可以使用所给计算机系统支持的程序间通讯的所有机制. 在建立当前 Mathematica 进程之间的联系时,最常用的机制是互联网 TCP 端口.
大部分计算机系统有几千个可编号的端口,其中一些分配给标准的系统 服务.
MathLink 连接中可以使用任何未分配的端口.

Session on frog.wolfram.com

frog.wolfram.com 找出未分配的端口

Session on toad.wolfram.com

连接到 frog.wolfram.com 端口上

用链接发送当前机器名

Session on frog.wolfram.com

读出在 toad 上写入的表达式

通过使用 MathLink 连接的互联网端口,就可以在不同机器的 Mathematica 进程间方便地传输数据. 所需要的是在这些机器间存在互联网接连.
由于 MathLink 是一个完全独立的系统,MathLink 连接的每一个终端上 计算机类型不需要相同. MathLink 将注意到这些并优化数据的传输.