この質問は少なくとも聞かれたことは知っていますここ。
しかし、少なくとも私にとっては、満足のいく答えはありませんでした。アンマネージ コードとの相互運用に関するマーシャリングについては多くの議論がありますが、.NET で時々行う必要がある、あるスレッドから別のスレッドへのマーシャリングについてはどうでしょうか。
こうなると、マーシャリングとは実際何なのかと疑問に思います。マーシャリングの定義を述べる場合、相互運用性のケースと、スレッド間で「マーシャリング」するケースの両方を説明できるように、どのように定義するのでしょうか。
ベストアンサー1
多くの場合、計算ではデータをあるサイトから別のサイトに移動する必要があり、共有メモリはありません。そのため、1 つの計算がデータを含むメッセージを他の計算に送信します。
そのデータが任意に複雑な場合、メッセージでどのように送信すればよいでしょうか?
マーシャリングとは、データ フィールドまたは関連する構造のセット全体を、メッセージで送信できるシリアル化された文字列に変換するプロセスです。 2 進数をマーシャリングするには、メッセージ形式がテキストでなければならない場合は、16 進数の文字列に変換します。 メッセージがバイナリ データを運ぶ場合は、2 進数を 4 つのリトルエンディアン正規化バイナリ バイトに変換して送信します。 ポインターはより困難です。多くの場合、実際のメモリ位置とは無関係な抽象的な参照 (たとえば、「ノード番号」) に変換する必要があります。
もちろん、データを「マーシャリング」する場合は、最終的には「アンマーシャリング」、つまりシリアル ストリームを読み取って送信されたデータ (構造) を再構築するプロセスを実行する必要があります。
多くの場合、この目的を達成するために使用されるライブラリには (アン) マーシャリング ルーチンがあり、場合によっては、データを送受信するために (アン) マーシャリング ルーチンで必要なすべての呼び出しを作成するツールさえあります。