(精华)2020年12月23日 .NET Core 多线程底层详解(基础知识篇)

.NET Core-多线程主要分为原生线程和托管线程

一:原生线程,操作系统负责线程的创建、运行、切换、终止,

线程切换有两种方式:
1、主动切换,线程对应的任务主动要求暂停线程的运行
2、被动切换,强制切换,抢占,时间片
保存某个时间点上的CPU中各个寄存器的值的数据结构被称为上下文
在这里插入图片描述
在这里插入图片描述
RSP寄存器,ESP(X86)

二:托管线程,基于原生线程,由.NET管理的线程被称为托管线程

Thread对象(托管线程对象)
在这里插入图片描述
非托管线程在原生线程上首次调用托管代码时,

  • .NET程序运行后在主线程上调用Main函数时。托管线程对象中包含多种数据结构:线程本地存储托管函数
  • 非托管函数的切换记录
  • 分配上下文
  • 执行上下文
  • 同步上下文

.NET运行时会把所有的托管线程对象记录到一个内部的列表结构里
托管线程中的两种模式:抢占模式(不能访问托管堆上的对象)、合作模式(可以自由的访问托管堆上的对象)。
GC在执行垃圾回收的时候,需要找到所有存活的对象,并且清理没有被引用的对象。
负责执行扫描与清理对象的GC线程
负责分配对象或改变对象间引用关系的其它线程
同时运行
主动切换线程自己切换自己的模式,托管代码通过PInvoke调用非托管代码时切换到抢占模式,返回到托管代码切换回合作模式
被动切换,线程1切换其它线程
GC安全点:GC信息、
在这里插入图片描述
返回地址劫持的技术
托管线程对象都关联了一个TLB的表,TLM表
TLM Thread Local Module
TLB Thread Local Block
在这里插入图片描述
在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:白松林 返回首页