(精华)2020年12月23日 .NET Core 多线程底层详解(基础知识篇)
【摘要】
.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)