用于在同一进程中的.Net AppDomains之间进行通信的基本机制是什么?

时间:2009-07-25 04:04:30

标签: .net remoting appdomain

我意识到理性的下意识反应将是“让你白痴!请阅读MSDN文档。”我可以找到关于.Net Remoting的每一小部分信息都在进程间通信的上下文中:套接字,共享内存,管道......在IPC方面经典,但AppDomain并不是真正的进程。但是,AppDomains似乎享有成为一体的大部分好处。从学术角度来看,与位于同一进程中的实体之间的通信相比,OS IPC原语很重要。是否有通信在同一进程中跨越AppDomain边界时使用的特殊AppDomain管道?我对此表示怀疑。如果MS改变了Windows内核中进程隔离的基础以适应AppDomains,我会感到震惊。

3 个答案:

答案 0 :(得分:4)

在这种情况下有一条快速的道路。不需要进程间通信,因为appdomain位于同一进程中,CLR可以完全访问所有这些进程和完整的地址空间。它实际上只是调用堆栈中的一些标记,用于安全性和异常处理以及appdomains提供的卸载性。

答案 1 :(得分:1)

您的问题的旁注,或更多历史记录。这并不是全新的,COM在线程之间的编组接口中有一些类似的语义:一个线程使用CoMarshalInterThreadInterfaceInStream将接口封送到流中,然后另一个线程将使用CoGetInterfaceAndReleaseStream从流中提取内容。

答案 2 :(得分:-1)

流程中AppDomains之间进行通信的基本方式确实是远程处理。这允许对象存在于一个AppDomain中,并允许其他对象通过另一个域中的透明代理进行通信。

是的AppDomains并不是一个真正的流程,但它们最好被设想为非常轻量级的流程。