6

我只是好奇,是否可以将程序的所有变量和当前状态转储到一个文件中,然后在另一台计算机上恢复它?!
假设我有一个 Python 或 Ruby 的小程序,给定特定条件,它将所有当前变量和当前状态转储到一个文件中。
稍后,我可以在另一台机器上再次加载它,然后返回它。
类似于 VM 快照功能。
我在这里看到过这样的问题,但与 Java 相关,保存当前的 JVM 并在不同的 JVM 中再次运行它。大多数人都说没有这样的东西,只有兵马俑有一些东西,仍然不完美。谢谢你。

为了澄清我想要实现的目标:
给定 2 个或更多 Raspberry Pi,我试图在 Pi nº1 上运行我的软件,但是,当我需要用它做一些不同的事情时,我需要将软件移动到 Pi nº2没有数据丢失,只有轻微的中断时间。
等等,到无限数量的机器。

4

3 回答 3

2

我试图重新发明轮子的接缝。
检查此链接:
http ://en.wikipedia.org/wiki/Application_checkpointing#DMTCP

http://www.linuxscrew.com/2007/10/17/cryopid-freeze-and-unfreeze-processes-in-linux/

于 2012-12-20T14:02:43.733 回答
1

好问题。

在 Smalltalk 中,是的。

实际上,在 Smalltalk 中,转储整个程序并重新启动是存储和共享程序的唯一方法。没有源文件,也无法从零开始启动程序。因此,在 Smalltalk 中,您将免费获得您的功能。

Smalltalk VM 提供了一个钩子,每个对象都可以在其中注册以在重新启动后恢复其外部资源,例如重新打开文件和互联网连接。而且,例如整数数组被注册到该钩子以在转储已移动到具有不同字节序的机器时更改其值的字节序。

这可能会让人预感用一种设计上不支持可恢复转储的语言来实现这一目标可能会变得多么困难(或不困难)。

唉,所有其他语言都没有那么活跃。除了一些 Lisp 实现之外,我不知道任何支持从内存转储恢复的语言。

这是一个错失的机会。

于 2012-12-10T22:41:55.717 回答
0

我已经看到 Mariano 在最近的 Esug 会议上演示了在 Pharo Smalltalk 中使用 Fuel(对象序列化)。只要不碰到未序列化的对象,就可以继续调试和运行。Squeak smalltalk在 Pi 上运行,如果保存图像对您来说足够好,这很简单。不过,我们仍在等待更快的 JITting VM for ARM(Google Summer of Code 计划的一部分)

于 2012-12-13T11:43:09.037 回答