晓看天色暮看云
  • near_me
    首  页
  • view_week
    分  类
    keyboard_arrow_down
    layers
    页  面
    keyboard_arrow_down
  • description 文  章
    35
  • textsms 评  论
    0
  • vincent
    .NET多线程

    access_time
    brush 523个字
    whatshot 83 ℃

    线程

    • 原生线程

      • 操作系统管理的线程,N个寄存器

        • CPU各个寄存器的值的数据结构,上下文切换
      • 单个逻辑核心,执行一个线程(轮流)

    线程切换

    • 主动切换
    • 被动切换,强制切换==抢占(硬件计时器),最大时间时间片

    线程调度

    线程栈空间

    • 托管线程,.NET Core 基于原生线程模型.NET管理的线程托管线程
    一个托管线程==一个原生线程 0:1 1:1的关系,一个Thread对象关联一个原生线程
    托管代码创建、Start方法后,创建新的原生线程关联线程对象
    .NET运行时内部使用同时创建
    线程本地存储、托管函数/非托管函数、分配上下文、执行下文……

    标准的线程操作接口,最终也是调用系统函数(c++),来操作原生线程
    运行时:管理托管线程对象(调用系统API操作)关联原生线程

    两种模式

    GC *z找出所有存活对象,清理没有引用的对象
    负责执行扫描与清理对象的GC线程 需要停止其他线程的运行
    负责分配对象或者改变对象引用关系的其他线程
    为了线程更安全配合GC工作,防止死锁的发生
    .NET引入两种模式
    • 抢占模式:不能访问托管堆上的对象,等待GC结束,切换到合作模式
    • 合作模式:可以自由访问托管堆上的对象
    托管代码必须在合作模式上运行,非托管代码没有限制
    切换方式:
    • 主动切换:自己切换自己,托管代码通过P/Invoke调用非托管代码
    • 被动切换:一个线程切换其他线程的模式,GC线程切换其他线程到抢占模式
    合作模式->抢占模式,即挂起线程,必须让线程停在GC安全点,jit编译器元数据(GC信息*线程运行到某条指令时,哪些位置有引用类型的对象,这些对象会作为根扫描对象)

    #如无特别声明,该文章均为 vincent 原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。
    #最后编辑时间为: 2023 年 05 月 09 日





    关于 DreamCat

    主题名称:DreamCat | 版本:2.8.221001(LTS)

    主题开发:HanFengA7 | TeddyNight | Dev-Leo | CornWorld | WhiteBearcn | DFFZMXJ

    Designed by HanFengA7 Power by Typecho

    Copyright © 2015-2025 by LychApe All rights reserved!

    加我的QQ
    加我的微博
    加我的支付宝
    加我的微信