实际上.NET可执行
程序承载在
进程的一个逻辑分区中,称为.NET
应用程序域。 可见,一个进程可以包含多个应用程序域,每一个应用程序域中承载一个.NET可执行程序,这样的好处如下: 1、应用程序域为承载的应用程序提供了深度隔离。如果进程中一个应用程序域失败了,其他的应用程序域也能保持正常。 2、和一个完整的进程相比,应用程序域的CPU和内存占用要小的多。因此CLR加载和卸载应用程序域比起完整的进程来说也快的多。 3、应用程序域是.NET平台 *** 作系统独立性的关键特性。这种逻辑分区将不同 *** 作系统加载可执行程序的差异抽象化了。 AppDomain的主要成员: UnLoad():该静态方法在进程中卸载指定的应用程序域。 CreateDomain():该静态方法在当前进程中创建一个新的应用程序域。由于CLR能够根据需要创建应用程序域,所以必须调用这个方法的机会很少。 GetAssemblies():获取已加载到此应用程序域中的.NET CMS程序集。 BaseDirectory:获取基目录,该目录用于探测相关的程序集。 ExecuteAssembly():根据文件名在应用程序域中执行程序集。 Load():动态加载程序集到当前应用程序域。 GetCurrentThreadId():该静态方法返回当前应用程序域上活动的线程ID。 CreateInstance():在指定CMS程序集文件中创建指定类型的新实例。 分析:-->应用程序域(AppDomain)用于减少运行应用程序的系统开销,是.NET中的一个重要技术改进。 有些应用程序需要与其他程序分离开来,但同时还需要彼此通信,这时需要用到应用程序域。 应用程序域可以做到分离组件,它不会导致因在进程之间传送数据而产生性能问题。 主要的 *** 作方法是将任何一个进程分解到多个应用程序域中,而每一个应用程序域均对应一个应用程序,执行的每个线程都运行在一个具体的应用程序域中。 倘若不同的可执行文件都运行在同一个进程空间中,因理论上应用程序需要与其他程序可以直接访问彼此的数据,所以它们之间能够轻松地共享数据。 虽然在理论上这是可以实现的,但是CLR依然会检查每个正在运行的应用程序的代码,以确保这些代码不偏离它自己的数据区域,并且保证不发生直接访问其他进程的数据的情况。 注意:在一个 *** 作系统的进程中运行一个或多个应用程序域。应用程序域的创建和销毁所需的开销,相对于 *** 作系统进程较小。但和 *** 作系统进程一样,应用程序域之间的数据共享相当困难。 总结:本文将讨论 NET的应用程序域 并且它们是如何对ASP NET的执行和调度产生影响的 当在Windows中启动Notepad程序时 众所周知程序会执行一个包含在容器内的进程 可以启动多个Notepad的实例 并且每个实例都会在一个专注的进行程运行 使用任务管理器 可以看到在系统中当前运行的所有进程的清单 一个进程包括可执行从 *** 作系统中保留的在内存中的代码和程序数据 在进程之内只少有一个包含在进程之内的正在执行指令的线程 并且在多数情况下有多个线程 如果程序打开了任何文件或者资源 这些资源将属于这个进程 一个进程也有一个分界线 包含在进程之内的错误代码不能在当前进程之外的地区腐化 在一个进程之内很容易通讯 但是专业技术要求一个进程对另一个进程通讯是必需的 每一个进程也在一个特殊的上下文安全系统中运行 这个安全系统规定在机器和网络中进程做什么 一个进程是一个在Windows *** 作系统中独立运行的最小单位 这会给在一个单一服务器上对一大堆应用程序的ISP提出一个问题 ISP将会分离每一个在同一个服务器上的与另一个公司的应用程序干扰的ASP NET应用程序 但是相关的发射和执行一个对成百上千的应用程序的过程成本禁止的 介绍应用程序域 NET介绍一个应用程序域的概念 或者AppDomain像一个过程 AppDomain是既是容器又是边界线 NET运行时间使用AppDomain作为代码和数据的容器 就像 *** 作系统一个过程作为代码和数据的容器一样 当 *** 作系统使用一个过程来分离不整齐的代码时 NET运行时间使用一个AppDomain来分离在一个安全边线内的代码 一个AppDomain仅仅属于一个单过程 但是单个过程能够保持多重的AppDomain 一个Appdomain创建起来相对容易(与一个过程比较起来) 并且与一个过程比较起来具有少的维护费用 由于这些原因 一个AppDomain是ISP(提供成千上万的应用程序)的很好的解决方案 每一个应用程序可以生存在一个独立的AppDomain之内 并且许多这样的AppDomain可以生存于一个单一的过程(节省费用)之内 AppDomain 在同服务器上创建了两个ASP NET应用程序 并且没有任何特殊配置 会发生什么事情呢?一个单一的ASP NET手工进程使ASP NET应用程序变成两方面的主要程序 在Windows XP和Windows 中 这一程序被命名为aspnet_wp exe 并且这一程序运行在本地的ASPNET计数器的前后安全关系中 在Windows 手工程序拥有w wp exe并且默认运行在NEOR SERVICE中 一个对旬可以进住在一个AppDomain中 每一个ASP NET应用程序将具有它自己的一套全局变量 Cache Application进住进同一进程 NET AppDomain是一个独立的单元 如果存有共享的或静态成员的类 并且那些类存在于两种应用程序之内 每一个AppDomain拥有它自己的静态字段的备份—数据并不共享 每一个应用程序的数据和代码安全独立存在并且在一边界之内由AppDomain提供 为了在AppDomain之间通讯或者在AppDomain之间交换对象 需要查看在 NET中穿过边界的通讯技术 例如 NET细微的或Web 服务 对将AppDomain作为边界思想的警告之一是ASP NET应用程序在默认情况下会带着充分的信任运行 充分信任的代码可以执行本地代码 并且本地代码可以本质地在进程之内的任何内容 需要运行带着部分信任执行应用程序来约束存取不完整的代码并且对安全的AppDomain验证所有代码 隐藏备份并且重新启动 一旦一个集合加载到一个AppDomain 没有办法从AppDomain集合的办法 不过 从一个进程中移除一个AppDomain是有可能的 如果将一个已更新的dll复制到一个应用程序的子目录中 从ASP NET的运行时间知道有新代码要执行 既然ASP NET不能将dll复制到已存在的AppDomain中 它就会起动一个新AppDomain 旧的应用程序域是 排水已停止 那就是 存在的需要被允许完成执行并且一旦它们执行完成AppDomain可以卸载 带有新代码的新的AppDomain就会开始并且开始所有的新请求 典型地说 当一个dll加载进一个进程时 进程对dll加锁并且不能对磁盘的上的文件进行覆盖 不过 AppDomain有一个众所周知的特点 隐藏复制那所有的允许保留在磁盘上的那些未被加锁的可替换的集合 运行时间对二进制子目录的带有Shadow Copy的ASP NET进行初始化 AppDomain将任何的加锁之前的dll从二进制子目录中拷贝到一个临时位置并且再将这些dll加载到内存 Shadow Copy允许没有将网页在线的情况下对所有在二进制子目录中的任何dll进行重写 熟练掌握Domain 应用程序域替换OS进程将为单独的 NET结点单元 一个可理解的应用程序域将会给你一个在ASP NET应用程序后的手工发生的概念 使用AppDomain类的CurrentDomain属性 可以检查关于代码正在运行的AppDomain的属性 包括我们在此文章中讨论的Shadow Copy lishixinzhi/Article/program/net/201311/11383
并发性、共享性、虚拟性、异步性。并发:指两个或多个事件在同一时间间隔内发生,这些事件宏观上是同时发生的,但在微观上是交替发生的。并行:指两个或多个事件在同一时刻发生。 *** 作系统的并发性:指计算机系统中“同时”地运行着多个程序,这些程序宏观上是同时运行的,在微观上是交替运行的。 *** 作系统和程序并发是一起诞生的。我们的计算机的CPU有单核的,双核的,四核的,八核的!单核CPU同一时刻只能运行一个程序,各个程序只能并发地执行(交替地使用CPU)!多核CPU同一时刻可以执行多个程序,多个程序可以并行地执行(同时发生运行)。共享:即资源共享,是指系统中的资源可供内存中多个并发执行的进程中同时使用。所谓“同时”,往往是宏观上的,而在微观上,这些进程可能是交替地对资源进行访问的(即分时共享)。两种资源共享方式:互斥共享方式和同时共享方式。互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。同时共享方式:系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问。并发性和共享性互为存在条件的。虚拟:是指一个物理上的实体变为若干个逻辑上的对应物,物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。异步:在多道程序环境下,允许多个程序并发的执行,但由于资源有限,进程的执行不是一管到底的,而是走走停停已不可预知的速度向前推进,这就是进程的异步性!只有系统拥有并发性,才有可能导致异步性,没有并发和共享,就谈不上虚拟和异步。
*** 作系统(OperationSystem,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织和调度计算机的工作和资源的分配,以提供给用户和其他软件方便地接口和环境,它是计算机系统中最基本的系统软件。用户可以直接和 *** 作系统进行交互,但是大多数情况下都是通过应用软件与 *** 作系统进行交互。硬件指的是CPU、内存、硬盘等资源。
评论列表(0条)