.net AppDomain、程序集、进程和线程之间的区别

.net AppDomain、程序集、进程和线程之间的区别,.net,.net,AppDomain、Assembly、进程和线程之间有什么区别?AppDomain是进程中的隔离单元。AppDomains可以在运行时创建、加载代码和卸载。这是一个隔离边界,旨在使.NET应用程序更加可靠 程序集包含一个或多个模块,这些模块包含已编译的代码块。您通常会将程序集视为.EXE或.DLL 流程是一个正在执行的应用程序(waaaay过于简化) 线程是执行上下文。操作系统在线程中执行代码。操作系统在线程之间切换,允许每个线程依次执行,从而给人一种多个应用程序同时运行的印象 把它放在一起(非

AppDomainAssembly进程和线程之间有什么区别?

AppDomain是进程中的隔离单元。AppDomains可以在运行时创建、加载代码和卸载。这是一个隔离边界,旨在使.NET应用程序更加可靠

程序集包含一个或多个模块,这些模块包含已编译的代码块。您通常会将程序集视为.EXE或.DLL

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

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

把它放在一起(非常简单)


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

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

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

进程是操作系统用来促进程序执行的过程。进程是一个程序的“RAM表示”,该程序的地址空间由堆栈、堆、静态和代码区组成。每个进程都有一个与之关联的唯一进程Id


线程是一个重量轻的过程。一个进程至少有一个线程(即主线程),根据并行性,OS可以在单个进程内创建多个线程,并在它们之间切换上下文,以支持更快的程序执行。线程可以共享进程中的某些内存区域。

从技术上讲,程序集是一个组件,由一个或多个模块组成。模块是.EXE或.DLL文件。确实,您可以将模块合并到单个程序集中。这是我遗漏的许多细节之一!当你把它们放在一起,有什么区别->一个进程是由操作系统创建的,而应用程序可以产生新的进程?@变量这个程序是位于磁盘上的已编译的可执行文件。进程是操作系统在将可执行文件加载到内存并开始执行其代码时创建的。因此,在运行.Net应用程序时,可以说操作系统启动了一个进程。在这个进程中,它的主线程运行一个CLR实例。在此CLR实例中,创建了一个AppDomain。.Net dll或exe在此AppDomain中运行。更正?更正:线程通常不共享堆栈。如果他们真的需要,他们可以读取/修改彼此的堆栈,但一般来说,每个线程都有自己的堆栈。我已经从你的帖子中删除了那句话。请再检查一下这是否是你的意思。我同意。线程有自己的堆栈。谢谢你的更正。