用 MathLink 进行 Mathematica 进程间的通讯
Mathematica 进程间的 MathLink 连接.
会话 A
| Out[1]= |  |
会话 B
| Out[2]= |  |
会话 A
计算

并将其写入该链接.
会话 B
从这个链接读入,得到送来的

.
| Out[4]= |  |
会话 A
| Out[6]= |  |
Mathematica 进程间 MathLink 连接的一个用途就是不使用中间文件而传输数据.
另一个用途就是把一个计算的不同部分分配到不同的进程中去.
会话 A
这里写表达式

,不计算它.
会话 B
从链接读入这个表达式,立即把它放在
Hold 内.
| Out[8]= |  |
| Out[9]= |  |
调用 LinkWrite 时,它向 MathLink 连接写入一个表达式,并立即返回. 当调用 LinkRead 时,直到从 MathLink 读入一个完整的表达式后才返回.
通过调用 LinkReadyQ[link] 可以知道是否有要读入的内容已准备好. 当 LinkReadyQ 返回 True 时,就可以安全地调用 LinkRead 开始立即读入一个表达式. 但如果 LinkReadyQ 返回 False 时,则在另一个 Mathematica 进程中用 LinkWrite 写入一个要读的表达式之前 LinkRead 是锁住的.
会话 A
| Out[10]= |  |
会话 B
会话 A
| Out[12]= |  |
| Out[13]= |  |
LinkReadyQ 可以采取链接对象的列表,并行计算每个链接来决定是否有可以读入的数据. 在一个单链接的情况下,第二个变量指明了用完时间的阶段,并使 LinkReadyQ 等待直到链接之一可以开始使用.
| LinkCreate[LinkProtocol->"TCPIP"] | 挑选出计算机上任一个未用端口 |
| LinkCreate["number",LinkProtocol->"TCPIP"] |
| 用一个指定端口 |
| LinkConnect["number",LinkProtocol->"TCPIP"] |
| 连接到同一计算机的一个端口 |
| LinkConnect["number@host",LinkProtocol->"TCPIP"] |
| 连接到另一计算机的一个端口 |
通过 TCP/IP 建立 MathLink 连接的途径.
MathLink 可以使用所给计算机系统支持的程序间通讯的所有机制. 在建立当前 Mathematica 进程之间的联系时,最常用的机制是互联网 TCP 端口.
大部分计算机系统有几千个可编号的端口,其中一些分配给标准的系统服务.
在 MathLink 连接中可以使用任何未分配的端口.
在 frog.wolfram.com 上的会话
对

找出未分配的端口.
| Out[14]= |  |
在 toad.wolfram.com 上的会话
连接到

的端口上.
| Out[15]= |  |
在 frog.wolfram.com 上的会话
读出在

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