69 votes

Qu'est-ce que le marshalling? Que se passe-t-il quand quelque chose est "organisé"?

Je sais que cette question a été posée, au moins ici.

Mais il n'y avait pas une réponse satisfaisante, au moins pas pour moi. Il y a beaucoup de parler de l'ordonnancement en ce qui concerne l'interopérabilité avec du code non managé, mais que dire de l'ordonnancement d'un thread à l'autre, comme nous avons à faire .NET parfois.

Cela m'amène à me demander ce regroupement, vraiment? Quand vous donnez une définition de la composition des trains, comment définiriez-vous afin qu'il vous explique le cas de l'interopérabilité, ainsi que les cas où vous êtes "triage" entre les threads?

85voto

Ira Baxter Points 48153

Les calculs ont souvent besoin de déplacer les données d'un site à l'autre, et n'ont pas de mémoire partagée. Donc un calcul envoie un message contenant les données à l'autre.

Comment devrait-données, si elle est arbitrairement complexe, être envoyés dans un message?

Regroupement est le processus de conversion d'un champ de données, ou de toute une série de structures, dans une chaîne sérialisée qui peuvent être envoyés dans un message. Pour marshall un binaire nombre, on peut la convertir en hexadécimal chaîne de chiffres, si le format de message doit être du texte. Si le message transporter des données binaires, le nombre binaire peut être converti en 4 little-endian normalisé forme d'octets binaires et les envoyés de cette façon. Les pointeurs sont plus difficiles; souvent, on doit les convertir en une référence abstraite (par exemple, un "numéro de nœud") qui est indépendante de la mémoire des lieux.

Bien sûr, si vous "marshall" de données, vous devez éventuellement "unmarshall", qui est le processus de la lecture de la série de flux et de reconstruction de la transmission de données (structure).

Il y a souvent de (dé)sérialisation des routines dans une bibliothèque qui sont utilisées pour atteindre ce but, et parfois il y a même des outils qui fabriquent tous les appels nécessaires sur la (dé)sérialisation des routines pour envoyer/recevoir les données.

29voto

Reed Copsey Points 315315

De l'ordonnancement est de prendre les données, sous quelque forme, et de les traduire dans un formulaire séparé. C'est un terme générique, et utilisé dans de nombreux endroits avec des différences subtiles dans ce sens.

Par exemple, dans .NET, la couche d'interopérabilité lorsque vous travaillez avec des types natifs "maréchaux" vos données à partir de l' .NET type dans le formulaire approprié d'appeler la méthode native, puis "maréchaux" les résultats.

Comme pour la "formation" des trains entre threads - Souvent, vous aurez besoin d'avoir le code à exécuter sur un thread différent de celui en cours. Par exemple, si vous utilisez Windows Forms, vous ne pouvez pas modifier un élément de l'INTERFACE utilisateur sur un pool de threads thread, vous aurez besoin de "maréchal" l'appel vers le thread d'INTERFACE utilisateur. Ceci est fait par la création d'un délégué, et de passer le délégué de retour pour le thread d'interface utilisateur via le Contrôle.Invoke (qui utilise un système assez complexe de poster ce retour à la bonne synchronisation du contexte), qui exécute à son tour le délégué sur le thread d'interface utilisateur pour vous.

12voto

nlawalker Points 1874

Wikipedia la définition est en fait assez bonne.

Le concept global de regroupement est le même que "la sérialisation:" passer d'une représentation en mémoire (ce qui, en un sens, c'est comme pas de représentation à tous - quand quelque chose est dans la mémoire-il tout simplement "existe") à un "papier" de la représentation, que ce soit en XML ou peut-être un flux binaire ou quelque chose. Toutefois, en fonction de ce que vous faites, il peut aussi signifier une sorte de transformation ou de conversion vers un format cible.

Pour le processus de triage: un thread n'est pas simplement "l'appel" une autre - données doit être emballé et "envoyé" à partir d'un thread à l'autre. Regroupement est le processus d'emballage de données (par exemple, les données sur la méthode que vous voulez l'appeler, et ses paramètres).

Si vous êtes à la composition des trains en termes d'interopérabilité, vous êtes d'emballage d'un appel de méthode et de ses paramètres dans une structure de données qui peut être envoyé à un processus/thread qui exécute le composant COM. Ce paquet doit être dans un format que le composant COM peut comprendre.

4voto

Mike Bantegui Points 5740

La façon dont je le comprends regroupement est qu'il fournit un moyen pour vous de transférer des données de manière cohérente dans les différents environnements d'exploitation.

Dans le contexte de regroupement des données provenant de la gestion de code non managé, c'est plus ou moins la même.

J'ai des données, par exemple un tableau d'entiers ou de tout type de données de mon choix, et je veux le rendre disponible pour l'utiliser dans mon code C# après mon code C++ n'des opérations.

Je ne peux pas juste dire "Hey, c'est là que le tableau est, faire ce que vous voulez" pour le code C#. Un tableau d'entiers en C++ ne peuvent pas être stockés de la même manière qu'en C#. Marshaling allons-nous transmettre ces données dans un environnement indépendant, de sorte que chaque côté voit les données de la même manière exacte.

Un autre exemple serait dans le réseau. Vous n'avez généralement pas à l'appel de ce regroupement, mais si vous voulez le transmettre sur le réseau, vous devez généralement transmettre d'une façon telle que celui qui la reçoit et interprète les données de la même manière que vous le faites. Votre ordinateur pourrait représenter des données en little endian ordre, et l'autre pourrait représenter en big endian commande.

tl;dr: le Marshaling vous offre un moyen de représenter les données de manière cohérente à travers les différents environnements d'exploitation

1voto

corsiKa Points 39442

Il est généralement utilisé dans le contexte "écrit au format XML", mais il peut être regroupé dans n'importe quel format.

 2.  To arrange, place, or set in methodical order.
   (from American Heritage® Dictionary of the English Language)
 

Cela signifie donc que vous organisez les données dans l'ordre / format méthodique souhaité. C'est souvent au format XML.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X