特别是,在两个不同的应用程序域中运行代码的含义是什么?
数据通常是如何跨越应用程序域边界传递的?这是否等同于跨进程边界传递数据?我很想知道更多关于这个抽象的信息,以及它有什么用。
EDIT:在I don't understand Application Domains上对AppDomain类的良好现有覆盖率
发布于 2009-07-07 20:00:11
AppDomain基本上提供了一个隔离的区域,在其中代码在进程内运行。
一种简单的方式是,它几乎就像一个位于主进程中的轻量级进程。每个AppDomain都以完全隔离的方式存在于进程中,这允许您安全地运行代码(如果需要,可以在不拆卸整个进程的情况下卸载它),具有单独的安全性等。
至于您的具体要求--如果您在一个进程内的两个不同的AppDomains中运行代码,那么代码将独立运行。AppDomains之间的任何通信都将通过MarshallByRefObject进行序列化或处理。在这方面,它的行为非常类似于使用远程处理。这提供了巨大的安全性-你可以运行你不信任的代码,即使它做错了什么,它也不会影响你。
在MSDN对Application Domains的描述中有更多的细节。
发布于 2009-07-07 20:03:57
它是由.NET运行时提供的隔离层。因此,应用程序域存在于一个进程中(一个进程可以有多个应用程序域),并拥有自己的虚拟地址空间。
应用程序域非常有用,因为:
multithreaded
发布于 2014-02-26 16:10:53
如果从处理器内部详细信息的角度来看,它会为代码段( CS)寄存器设置不同的值。代码和CS:IP (指令指针)寄存器是处理器正在执行的寄存器。
(为简洁起见,我选择略读与页表相关的讨论)。
AppDomain标记了这一边界。为了代码安全。
给出这个背景的原因是为了解决这些问题: 1.我们如何跨两个应用程序域访问资源(是的,使用管道或其他共享机制不能直接,因为CS:IP不能设置为其他应用程序域。只有操作系统可以做到这一点。而不是CLR)
这些案例的其他几个组合可以通过对CS:IP如何工作的少量知识来回答。
https://stackoverflow.com/questions/1094478
复制相似问题