【问题标题】:What is the underlying mechanism used to communicate between .Net AppDomains in the same process?同一进程中.Net AppDomains之间用于通信的底层机制是什么?
【发布时间】:2010-11-13 22:45:19
【问题描述】:

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

【问题讨论】:

    标签: .net remoting appdomain


    【解决方案1】:

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

    【讨论】:

    • 您知道描述此实现的任何文档吗?
    • 不,我没有。不过,您可以使用本机代码调试器(Windbg 或 VS)查看它。
    【解决方案2】:

    您的问题的旁注,或者更多的历史脚注。这并不是全新的,COM 在线程间的接口编组方面有一些相似的语义:一个线程将使用CoMarshalInterThreadInterfaceInStream 将接口编组为流,然后另一个线程将使用CoGetInterfaceAndReleaseStream 从流中提取接口。

    【讨论】:

      【解决方案3】:

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

      是的,AppDomain 并不是真正的进程,但最好将它们设想为非常轻量级的进程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-22
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        相关资源
        最近更新 更多