我真的希望得到一个明确的答案。
我之前有一个问题,我问过"What is a thread (really)?"我得到了一些非常好的答案,我从中得到的结论是:一个主题是:
线程是处理器寄存器的独立值集(对于单个内核)。由于这包括指令指针(又名程序计数器),它控制以什么顺序执行的指令。它还包括堆栈指针,它最好指向每个线程的唯一内存区域,否则它们会相互干扰。
即
线程不是比一组寄存器值更具“具体”的
和
CPU寄存器的确切列表取决于架构,但指令指针和堆栈指针几乎是通用的。它们定义一个线程,只要该线程(寄存器值集)被加载到处理器内核中,线程就会运行。处理器正在获取线程所需的指令并更新线程寄存器。当需要上下文切换时,处理器将这组寄存器值保存到存储器中并加载属于不同线程的集合,通常作为中断服务逻辑的一部分。
此外,我理解线程有TLS(线程本地存储)和他们自己的调用堆栈。
重申一下,澄清我的问题,一个线程的组件(正如我在我的标题中所说)是寄存器值,它的TLS和它的调用堆栈。我想知道标题中其他项目的组件(进程,appdomains和上下文)。
以下是我正在阅读的书(Pro C#2008和.NET平台)
的图表
我理解这个图与Win32进程有关,但我认为相同的TLS,调用Stack的想法适用于.NET。此外,我认为如果它包含定义这些线程(A和B)的寄存器值(或表示有寄存器值的东西),这个图会好得多。
现在我继续调查,我想立即问这一切。我想知道有关进程,AppDomains和上下文的相同信息(这是我理解为托管的“层次结构”的顺序,即进程主机appdomains,appdomains主机上下文,上下文主机线程)。
我的最终目标是获取足够的信息,我可以绘制所有这些实体(或者它们是什么)之间的关系,还有实际构成它们的组件(例如在线程的情况下,有寄存器值) ,TLS和实际组成的调用堆栈)。当我这样做时,我会在最后将这个问题作为编辑发布。现在,这是从我正在阅读的书中获取的图表(关于流程,应用程序域和上下文):
P.S。如果有人知道那里的图表已经解释了所有这些,我很乐意看到它。如果不 。 。 。为什么那里没有一个?
编辑:这是我远远超出的图表
答案 0 :(得分:1)
很难在在线论坛上发布大量信息并保持其可读性。
相反,我建议您阅读两本书: