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

    个类的静态变量。

     

     

  • 相关阅读:
    PHPLIB Template入门系列 4 模板嵌套
    jQuery 实例
    建立PHP的本地调试环境
    PHP缓存memcache简单应用
    PHP程序:虚拟域名服务DIY
    去掉网络共享的session
    C# 里EF 对Mysql DB更新,乱码
    sshd的log的位置
    cURL 访问https失败
    Eclipse中编辑properties文件的编码问题
  • 原文地址:https://www.cnblogs.com/pengshaomin/p/3307593.html
Copyright © 2020-2023  润新知