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

举报
愚公搬代码 发表于 2021/10/19 01:06:40 2021/10/19
【摘要】 .NET Core-多线程主要分为原生线程和托管线程 一:原生线程,操作系统负责线程的创建、运行、切换、终止, 线程切换有两种方式: 1、主动切换,线程对应的任务主动要求暂停线程的运行 2、被动切换,...

.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
在这里插入图片描述
在这里插入图片描述

文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。

原文链接:codeboy.blog.csdn.net/article/details/108394655

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。