2009-04-09 35 views

回答

45

一个AppDomain之间的差是一个过程内的隔离单元。 AppDomain可以在运行时创建,加载代码并卸载。它的设计使.NET应用程序更加可靠。

程序集包含一个或多个保存已编译的代码块的模块。您通常会将程序集看作.EXE或.DLL。

一个进程是一个正在执行的应用程序(waaaay过于简化)。

线程是一个执行上下文。操作系统在一个线程内执行代码。操作系统在线程之间切换,允许每个线程依次执行,从而给人以多个应用程序同时运行的印象。

为了把它放在一起(非常简化的)...

执行程序。一个进程由操作系统创建,在其单线程中它开始加载要执行的代码。在.NET应用程序中,CLR创建一个AppDomain。应用程序的执行程序集(.EXE)加载到此AppDomain中并开始执行。应用程序可以产生新的进程,创建AppDomain,将其他程序集加载到这些域中,然后创建新的线程以在任何这些AppDomain中执行代码。

+3

从技术上讲,组件是一个组件,由一个或多个模块组成。它是.EXE或.DLL文件的模块。 – 2009-04-09 12:16:01

+2

确实,您可以将模块合并到一个组合件中。这是我遗漏的很多细节之一! – Will 2009-04-09 13:33:08

10

CLR的JIT编译器最大的优点之一是它可以防止进程的虚拟地址空间重叠。例如,如果生成进程1并且CLR(MScorEE.dll)正在管理该进程中托管程序集(.exe或.dll)的执行,那么JIT编译器将确保分配给此的虚拟地址空间进程不会与其他相邻进程冲突或重叠。有了这个优势,现在可以重复使用单个进程来执行多个托管代码!每个托管代码执行都将拥有自己的AppDomain,并且超过AppDomain可以成为单个进程的一部分。这是IIS和SQL Server所使用的(单进程,多AppDomain)。

程序集是一个抽象术语,表示托管代码的单个可重用组件。程序集由元数据(PE32或PE32 +头+ IL头)和IL指令组成。 CLR的JIT编译器根据处理器及其体系结构(x86或x64)编译并将IL的汇编转换为特定于计算机的指令集。

进程是OS用来促进程序执行的。进程是程序的“RAM表示”,其地址空间由堆栈,堆,静态和代码区组成。每个进程都有一个与之关联的唯一进程ID。

线程是一个轻量级的过程。一个进程至少有一个线程(即主线程),并且取决于并行性,OS可以在单个进程内创建多个线程,并在其中创建上下文切换以支持更快的程序执行。线程可以共享进程内的一些内存区域。

相关问题