実行中のプロセスを一時停止し、シリアル化して別のマシンに (または後で) 移動し、再開する機能は、Mono ランタイムが Second Life スクリプト エンジンとして統合されたときに実装されました。これは数年前のことで、その作業がオープン ソースの Mono コードに組み込まれたかどうかはわかりません。しかし、すべての報告によると、それは成功した演習でした。
Miguel からのこのブログ投稿は、http: //tirania.org/blog/archive/2008/Jan-29.html から始めるのに良いかもしれません。また、Mono での Second Life に関する作業が議論された LANG.NET ビデオへのリンクがいくつかあります。
別の投稿から正確に何が行われたかについてのいくつかの手がかり:
2006 年、LindenLabs の Jim は、マイクロスレッディングをサポートするために SecondLife で行った作業を紹介しました。
ジムの仕事は、両方のジョーが要求したものよりもはるかに野心的でした. SecondLife では、コードをいつでも一時停止し、その状態全体をデータベースへの保存に適した形式にシリアル化できる必要がありました。シリアル化された状態は、別の時点または別のコンピューターで復元できます (たとえば、ノードからノードへの移動中)。
これを機能させるには、コール スタック チェーン全体、ローカル変数、およびパラメーターを正確に追跡し、任意の時点でコードを一時停止できるシステムが必要でした。
Jim は、状態のシリアライゼーションと生まれ変わりを既存の CIL 命令ストリームに注入する CIL 書き換えエンジンを使用してこれを行いました。彼は 2006 年の Lang.NET の講演でこの技術について詳しく説明しました。
この技術は 2008 年に実用化され、現在、この継続フレームワークは SecondLife の 1,000 万の Mono スクリプトを支えています。