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会单独保持一

    个类的静态变量。

     

     

  • 相关阅读:
    《Python》进程收尾线程初识
    《Python》进程之间的通信(IPC)、进程之间的数据共享、进程池
    L02-RHEL6.5环境中安装JDK1.8
    L01-RHEL6.5中部署NTP(ntp server + client)
    P01-Python中列表的复制问题
    数据库模式(三级模式+两级映射)
    事务的四大性质:ACID
    JAVA_接口_默认方法&静态方法
    2018年最新Java面试题及答案整理
    Socket通信原理
  • 原文地址:https://www.cnblogs.com/pengshaomin/p/3307593.html
Copyright © 2011-2022 走看看