AppDomain,程序集,进程和线程之间的区别
AppDomain , Assembly , Process和一个线程有什么区别?
AppDomain是一个进程内的隔离单元。 AppDomain可以在运行时创build,加载代码并卸载。 它的devise使.NET应用程序更可靠。
程序集包含一个或多个模块,这些模块包含编译的代码块。 您通常会将程序集看作.EXE或.DLL。
一个进程是一个正在执行的应用程序(waaaay过于简化)。
线程是一个执行上下文。 操作系统在线程内执行代码。 操作系统在线程之间切换,允许每个线程依次执行,从而给人以多个应用程序同时运行的印象。
把它放在一起(非常简化)…
一个程序被执行。 一个进程由操作系统创build,并在其单线程中开始加载代码执行。 在一个.NET应用程序中,一个AppDomain是由CLR创build的。 应用程序的执行程序集(.EXE)加载到此AppDomain中并开始执行。 应用程序可以产生新的进程,创buildAppDomain,将其他程序集加载到这些域中,然后创build新的线程以在这些AppDomain中的任何一个中执行代码。
CLR的JIT编译器最大的优点之一是它可以防止进程的虚拟地址空间重叠。 例如,如果生成进程1并且CLR(MScorEE.dll)正在pipe理该进程中托pipe程序集(.exe或.dll)的执行,那么JIT编译器将确保分配给此的虚拟地址空间进程不会与其他相邻进程发生冲突或重叠。 有了这个优势,现在可以重复使用单个进程来执行多个托pipe代码! 每个托pipe代码执行都将拥有自己的AppDomain,并且多于AppDomain可以成为单个进程的一部分。 这是IIS和SQL Server(单进程,多AppDomain)所使用的。
汇编是一个抽象术语,表示托pipe代码的单个可重用组件。 程序集由元数据(PE32或PE32 +头+ IL头)和IL指令组成。 CLR的JIT编译器根据处理器及其体系结构(x86或x64)编译并将IL的汇编转换为特定于计算机的指令集。
进程是OS用来促进程序执行的。 一个进程是一个程序的“RAM表示”,其地址空间由栈,堆,静态和代码区域组成。 每个进程都有一个唯一的进程ID与之关联。
线程是一个轻量级的过程。 一个进程至less有一个线程(即主线程),根据并行性,OS可以在一个进程中创build多个线程,并在其中创build上下文切换,以支持更快的程序执行。 线程可以共享进程内的一些内存区域。