编辑:只是确认您是否可以复制此内容非常有用。尝试此操作只需要一台计算机(无需远程连接)。
更新似乎其他人无法在Mac或Win7上重现此功能,因此它可能是WinXP特定的,也可能是我的机器特有的。此时我放弃了。
最好有一个关于前端和内核如何通信的教程,这样我们就可以调试远程内核问题。任何这样的一般答案(或其他地方的教程链接)都是最受欢迎的。我已经知道Sascha Kratky的Remote Kernel Strategies。
现在的实际问题:当我以任何方式连接到远程计算机时(例如使用远程内核策略),前端迟早会冻结。我该如何防止这种情况?
以下是如何在一台机器上重现问题(无需远程连接):
创建新的内核配置(评估菜单 - >内核配置选项......)
选择高级选项。
MLOpen的论据:
-LinkName "8000@YOUR-IP-HERE,8001@YOUR-IP-HERE" -LinkMode Listen
-LinkProtocol TCPIP -LinkHost "YOUR-IP-HERE" -LinkOptions MLDontInteract
(将YOUR-IP-HERE
替换为您计算机的IP地址。在Windows上,您可以通过在命令窗口中键入ipconfig
来获取此信息。)
用于启动内核的Shell命令:保留为空(我们将手动执行)
打开一个新笔记本,将笔记本的内核设置为您刚设置的内核,并评估一些内容(1+1
)。
现在我们需要在连接超时之前手动启动内核。因此,在命令行模式下启动一个新内核(math
),并评估以下内容:
link=LinkConnect["8000,8001",LinkProtocol->"TCPIP"] (* connect to front end link *)
$ParentLink = link; (* set the front end link as parent link *)
现在连接已建立,一切似乎都正常工作(保存前端粉红色消息窗口中的一条消息)
评估Manipulate[n, {n, 0, 100, 1}]
。首先,这似乎也有效。现在玩滑块。前端迟早会冻结,需要被杀死。对我来说,向上和向下拖动滑块约10秒而不释放它总是足够的。
为什么前端会冻结?如何以一切正常工作的方式在前端和内核之间创建TCPIP模式连接?
一些注意事项:
LinkProtocol -> "SharedMemory"
,则问题永远不会出现。Links[]
验证MathLink`$PreemptiveLink
和MathLink`$ServiceLink
已创建,LinkConnectedQ[]
会在其上返回True
。再次注意,只有在连续拖动Manipualate
滑块几秒钟而不释放前端后,前端才会冻结。
Link to same question on MathGroup.
相关:Firewall settings for remote kernel to work (Mathematica)
答案 0 :(得分:2)
(不是答案,但很难把它写成评论)
fyi,有一些关于前端如何与内核通信的信息 http://reference.wolfram.com/mathematica/tutorial/AdvancedDynamicFunctionality.html大约一半,它说
The front end and kernel communicate with each other through several
MathLink connections, known as the main link, the preemptive link,
and the service link. The main and preemptive links are pathways by
which the front end can send evaluation requests to the kernel, and
the kernel can respond with results. The service link works in reverse,
with the kernel sending requests to the front end.
那里还有更多。可能会有所帮助。此外,第31页的PDF文件中包含相同的信息:
http://www.wolfram.com/learningcenter/tutorialcollection/DynamicInteractivity/
内核和前端之间的实际消息传递协议必须非常先进。