我意识到一个理性的下意识反应会是“远程处理你这个白痴!阅读 MSDN 文档。” 我能找到的关于 .Net Remoting 的每一条信息都在进程间通信的上下文中:套接字、共享内存、管道......在 IPC 方面的经典之作,但 AppDomain 并不是一个真正的进程。然而,AppDomains 似乎享有成为一体的大部分好处。从学术角度来看,与驻留在同一进程中的实体之间的通信相比,OS IPC 原语很重。当通信跨越同一进程内的 AppDomain 边界时,是否使用了特殊的 AppDomain 管道?我对此表示怀疑。如果 MS 改变了 Windows 内核中进程隔离的基本原理以适应 AppDomain,我会感到震惊。
问问题
930 次
3 回答
4
在这种情况下有一条快速路径。不需要进程间通信,因为 appdomains 存在于同一个进程中,并且 CLR 可以完全访问它们和完整的地址空间。它实际上只是调用堆栈中的一些标记,用于安全和异常处理目的以及 appdomains 提供的可卸载性。
于 2009-07-25T04:43:06.050 回答
1
您问题的旁注,或者更多的历史脚注。这并不是全新的,COM 在线程之间的接口编组方面有一些相似的语义:一个线程将使用CoMarshalInterThreadInterfaceInStream将接口编组为流,然后另一个线程将使用CoGetInterfaceAndReleaseStream从流中提取接口。
于 2009-07-25T07:16:21.560 回答
-1
进程内 AppDomain 之间进行通信的基本方式确实是远程处理。这允许一个对象存在于一个 AppDomain 中,并让其他对象通过另一个域中的透明代理通过它进行通信。
是的,AppDomains 并不是一个真正的进程,但最好将它们设想为非常轻量级的进程。
于 2009-07-25T07:35:18.290 回答