2009-07-25 20 views
4

Je me rends compte qu'une réponse rationnelle de réflexe serait "Remoting you idiot! Lire les documents MSDN." Toutes les informations que je peux trouver concernant .Net Remoting sont dans le contexte de la communication inter-processus: sockets, mémoire partagée, pipes ... les classiques quand il s'agit d'IPC, mais un AppDomain n'est pas vraiment un processus. Cependant, AppDomains semblent profiter de la plupart des avantages d'être un. D'un point de vue académique, les primitives IPC OS sont lourdes par rapport à la communication entre entités qui résident dans le même processus. Existe-t-il un canal AppDomain spécial utilisé lorsque la communication traverse une limite AppDomain dans le même processus? J'en doute. Je serais choqué si MS modifiait les principes fondamentaux de l'isolation des processus dans le noyau Windows pour accueillir AppDomains.Quel est le mécanisme sous-jacent utilisé pour communiquer entre les domaines d'application .Net dans le même processus?

Répondre

4

Il y a un chemin rapide dans ce cas. Il n'y a pas besoin de communication interprocessus, puisque les domaines d'application vivent dans le même processus et le CLR a un accès complet à tous et à l'espace d'adressage complet. C'est vraiment juste quelques marqueurs dans la pile d'appels pour des raisons de sécurité et de gestion des exceptions ainsi que la déchargabilité que donnent les domaines d'application.

+0

Connaissez-vous une documentation décrivant cette implémentation? –

+2

Non, je ne le fais pas. Vous pouvez le voir avec un débogueur de code natif (Windbg ou VS) cependant. –

1

Une note de côté à votre question, ou plus d'une note de pied de l'histoire. Ce n'est pas entièrement nouveau, COM avait une sémantique quelque peu similaire dans les interfaces de marshaling entre les threads: un thread marchaient l'interface dans un flux en utilisant CoMarshalInterThreadInterfaceInStream et l'autre thread extrairait l'intrface du flux en utilisant CoGetInterfaceAndReleaseStream.

0

La manière fondamentale de communiquer entre AppDomains dans un processus est en effet à distance. Cela permet à un objet de vivre dans un domaine d'application et d'en communiquer avec d'autres via un proxy transparent dans un autre domaine.

Oui Les AppDomains ne sont pas vraiment un processus mais ils sont mieux envisagés comme des processus très légers.