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

tech2024-12-22  16

.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

最新回复(0)