我意识到理性的下意识反应应该是“远程处理你这个笨蛋!阅读MSDN文档。”我能找到的关于.Net远程处理的每一条信息都是关于进程间通信的:套接字,共享内存,涉及到进程时的pipes...the经典,但AppDomain并不是一个真正的进程。然而,AppDomains似乎享受着成为其中一员的大部分好处。从学术角度来看,与驻留在同一进程中的实体之间的通信相比,OS IPC原语非常繁重。在同一进程中,当通信跨越AppDomain边界时,是否使用特殊的AppDomain管道?我怀疑。如果微软为了适应AppDomains而改变了Windows内核中进程隔离的基本原理,我会感到震惊。
发布于 2009-07-25 04:43:06
在这种情况下,有一条快速路径。不需要进程间通信,因为应用程序域驻留在相同的进程中,并且CLR可以完全访问所有这些应用程序域和整个地址空间。它实际上只是调用堆栈中的一些标记,用于安全和异常处理目的,以及appdomain提供的可卸载性。
发布于 2009-07-25 07:16:22
问题的边注,或者更多的是历史脚注。这并不是全新的,COM在封送线程之间的接口方面有一些类似的语义:一个线程将使用CoMarshalInterThreadInterfaceInStream将接口封送到流中,然后另一个线程将使用CoGetInterfaceAndReleaseStream从流中提取接口。
发布于 2009-07-25 07:35:18
进程内AppDomains之间通信的基本方式实际上是远程处理。这允许一个对象驻留在一个AppDomain中,并让其他对象通过另一个域中的透明代理通过它进行通信。
是的,AppDomains并不是一个真正的过程,但最好将它们想象为非常轻量级的过程。
https://stackoverflow.com/questions/1181159
复制相似问题