zoukankan      html  css  js  c++  java
  • AppDomain与进程、线程、Assembly之间关系

    AppDomain是CLR的运行单元,它可以加载Assembly、创建对象以及执行程序

    AppDomainCLR实现代码隔离的基本机制。

     

    每一个AppDomain可以单独运行、停止;每个AppDomain有自己默认的异常处理;

     

     

    一个AppDomain的运行失败不会影响到其他的AppDomain

     

    CLR在被CLR Host(windows shell or InternetExplorer or SQL Server)加载后,要创建一个默认的AppDomain,程序的入口点

    (Main方法)就是在这个默认的AppDomain中执行

     

     

    1. AppDomain vs 进程

    AppDomain被创建在进程中,一个进程内可以有多个AppDomain。一个AppDomain只能属于一个进程。

     

     

    二.AppDomain vs 线程

    AppDomain是个静态概念,只是限定了对象的边界;线程是个动态概念,它可以运行在不同的
    AppDomain

    一个AppDomain内可以创建多个线程,但是不能限定这些线程只能在本AppDomain内执行代码。

    CLR中的System.Threading.Thread对象其实是个soft thread,它并不能被操作系统识别;操作系统能识别的是hard thread
    一个soft thread只属于一个AppDomain,穿越AppDomain的是hard thread。当hard thread访问到某个AppDomain,一个

    AppDomain就会为之产生一个soft thread

    hard threadthread local storage(TLS),这个存储区被CLR用来存储这个hard thread当前对应的AppDomain引用以及soft

    thread引用。当一个hard thread穿越到另外一个AppDomain时,TLS中的这些引用也会改变。

     

     

    三.AppDomain vs Assembly

    Assembly.Net程序的基本部署单元,它可以为CLR提供用于识别类型的元数据等等。Assembly不能单独执行,它必须被加载到

    AppDomain中,然后由AppDomain创建程序集中的对象。
    一个Assembly可以被多个AppDomain加载,一个AppDomain可以加载多个Assembly

    每个AppDomain引用到某个类型的时候需要把相应的assembly在各自的AppDomain中初始化。因此,每个AppDomain会单独保持一

    个类的静态变量。

     

     

  • 相关阅读:
    经典数组排序方法------快速排序法
    经典数组排序方法------选择排序法,冒泡排序法
    两个非常好的bootstrap模板,外送大话设计模式!
    商场促销-策略模式(和简单工厂模式很像的哇) C#
    代码无错就是优?简单工厂模式 C#
    大话设计模式(C#)
    马加爵遗书 VS 药家鑫遗书
    GIT 常用命令
    Random快速产生相同随机数的原因及解决方案
    JSON WEB TOKEN,简单谈谈TOKEN的使用及在C#中的实现
  • 原文地址:https://www.cnblogs.com/pengshaomin/p/3307593.html
Copyright © 2011-2022 走看看