在Smalltalk VM映像中保存线程

在Smalltalk VM映像中保存线程,smalltalk,gnu-smalltalk,Smalltalk,Gnu Smalltalk,我运行以下GNU Smalltalk脚本: stdout << 'Before'; nl. ObjectMemory snapshot: 'image.im'. stdout << 'After'; nl. 现在我重新加载图像: $ gst -I image.im 我希望看到的是,打印后的单词——从原始脚本中保存图像的位置开始恢复执行。实际上,我只是得到了一个回复 显然,映像要么没有保存正在运行脚本的线程的状态,要么在加载映像时没有重新创建线程。我认为Smalltal

我运行以下GNU Smalltalk脚本:

stdout << 'Before'; nl.
ObjectMemory snapshot: 'image.im'.
stdout << 'After'; nl.
现在我重新加载图像:

$ gst -I image.im
我希望看到的是,打印后的单词
——从原始脚本中保存图像的位置开始恢复执行。实际上,我只是得到了一个回复


显然,映像要么没有保存正在运行脚本的线程的状态,要么在加载映像时没有重新创建线程。我认为Smalltalk图像应该包含整个系统状态的快照;那么为什么会发生这种情况呢?(我有什么办法可以做到这一点吗?我想使用这种行为。)

当停止和重新启动smalltalk图像时,你会遇到一个界限,即一切都是一个对象的幻觉可以维持多久。不能保证可以重新打开数据库连接、套接字、文件等。映像可能会在另一台计算机、另一个网络以及几年后重新打开。不同的小型会谈在如何处理这些问题上做出了略有不同的选择。在Pharo上运行Seaside时,侦听新连接的服务器连接将重新启动,Seaside会话本身将刷新

嗯,是的,但是线程是不同的——Smalltalk线程是绿色线程实现,并且完全在VM中实现。您可以在映像中保存一个线程并将其还原(我已经尝试过)。我想知道为什么处理脚本的线程没有被保存。有可能线程存在但无法连接到stdout吗?可能REPL已经拥有了这个套接字。问题不在于线程。ObjectMemory和stdout都不能完美地维持对象幻觉。
$ gst -I image.im