2.12.6 用 MathLink 进行 Mathematica 进程间的通讯 Mathematica 进程间的 MathLink 连接 Session A 这里开始一个 8000 端口的链接
Out[1]= |  |
Session B 这里连接到 8000 端口的链接上
Out[1]= |  |
Session A 计算 15! 并将其写入该链接 Session B 从这个链接读入,得到送来的 15!
Out[2]= |  |
这里将数据回写到链接 Session A 这里读入从进程 B 写出的数据
Out[3]= |  |
Mathematica 进程间 MathLink 连接的一个用途就是不使用中间 文件而传输数据. 另一个用途就是把一个计算的不同部分分配到不同的进程中去. Session A 这里写表达式 2+2,不计算它 Session B 从链接读这个表达式,立即把它放在 Hold 内
Out[4]= |  |
计算这个表达式
Out[5]= |  |
调用 LinkWrite 时,它向 MathLink 连接写入一个表达式,并立即返回. 但调用 LinkRead 时,直到从 MathLink 读入一个完整的表达式后才返回. 通过调用 LinkReadyQ[link] 可以知道是否有要读入的内容已准备好. 当 LinkReadQ 返回 True 时,就可以安全地调用 LinkRead 开始立即读入一个 表达式. 但如果 LinkReadQ 返回 False 时,则在另一个 Mathematica 进程中用 LinkWrite 写入一个要读的表达式之前 LinkRead 是锁住的. Session A 在链接中没有要读入的内容在等待,这时调用 LinkRead 时它就锁住
Out[5]= |  |
Session B 这里向链接写入一个表达式 Session A 此时在链接中有一个表达式待续
Out[6]= |  |
这时调用 LinkRead 时就不担心它锁住
Out[7]= |  |
建立 MathLink 链接的途径 MathLink 可以使用所给计算机系统支持的程序间通讯的所有机制. 在建立当前 Mathematica 进程之间的联系时,最常用的机制是互联网 TCP 端口. 大部分计算机系统有几千个可编号的端口,其中一些分配给标准的系统 服务. 在 MathLink 连接中可以使用任何未分配的端口. Session on frog.wolfram.com 对 frog.wolfram.com 找出未分配的端口
Out[8]= |  |
Session on toad.wolfram.com 连接到 frog.wolfram.com 端口上
Out[7]= |  |
用链接发送当前机器名 Session on frog.wolfram.com 读出在 toad 上写入的表达式
Out[9]= |  |
通过使用 MathLink 连接的互联网端口,就可以在不同机器的 Mathematica 进程间方便地传输数据. 所需要的是在这些机器间存在互联网接连. 由于 MathLink 是一个完全独立的系统,MathLink 连接的每一个终端上 计算机类型不需要相同. MathLink 将注意到这些并优化数据的传输.
|