【发布时间】:2011-07-09 13:55:41
【问题描述】:
我真的希望得到一个明确的答案。
我有一个之前的问题,我问过"What is a thread (really)?" 我得到了一些非常好的答案,我从中得出的结论是一个线程是:
线程是处理器寄存器的一组独立值(对于单个内核)。由于这包括指令指针(又名程序计数器),它控制以什么顺序执行的内容。它还包括堆栈指针,它最好指向每个线程的唯一内存区域,否则它们会相互干扰。
即
线程并不比一组寄存器值更“具体”
和
CPU 寄存器的确切列表取决于架构,但指令指针和堆栈指针几乎是通用的。他们定义了一个线程,当这个线程(一组寄存器值)被加载到处理器内核中时,线程正在运行。处理器正在获取线程所需的指令并更新线程寄存器。当需要上下文切换时,处理器会将这组寄存器值保存到内存中并加载属于不同线程的一组值,通常作为中断服务逻辑的一部分。
此外,我了解线程具有 TLS(线程本地存储)和它们自己的调用堆栈。
重申一下,为了澄清我的问题,线程的组件(正如我在标题中提到的)是寄存器值、它的 TLS 和它的调用堆栈.我想知道标题中其他项目的组成部分(进程、应用程序域和上下文)。
这是我正在阅读的书中的图表(Pro C# 2008 和 .NET 平台)
我了解此图与 Win32 进程有关,但我认为相同的 TLS,调用 Stack 理念适用于 .NET。另外,我认为如果该图包含定义这些线程(A 和 B)的寄存器值(或指示存在寄存器值的东西),它会更好。
现在我正在继续我的调查,我想一次就问这个问题。我想知道进程、应用程序域和上下文的相同信息(这是我理解为托管“层次结构”的顺序,即进程托管应用程序域、应用程序域托管上下文、上下文托管线程)。
我的最终目标是获得足够的信息,以便我可以绘制所有这些实体(或任何实体)之间的关系,以及实际构成它们的组件(例如,在线程的情况下,有寄存器值、TLS 和实际组成它们的调用堆栈)。当我这样做时,我会将这个问题的图表作为最后的编辑发布。现在,这是我正在阅读的书中的图表(关于进程、应用程序域和上下文):
附:如果有人知道已经解释了这一切的图表,我很乐意看到它。如果不 。 . .为什么没有一个??
编辑:这是我目前的图表
【问题讨论】:
-
那是线程本地存储而不是线程级别存储。
-
@Jim:哎呀,谢谢。我认为这不太对,打算查一下但忘了(这个问题花了我一段时间才写出来!)。
-
线程是一个对象(内核对象),因此它不仅仅是一个执行上下文(堆栈、寄存器、TLS)。 Win32 包含“纤程”的概念,它只是一个执行上下文(不是内核对象)。
-
@Stephen:你能在这里看看我的问题吗:stackoverflow.com/questions/5201852/what-is-a-thread-really我得到了很多很好的答案,也许我误解了,但似乎每个人都说它基本上是一个执行上下文(只是一些定义它的值),而不是真正的事物。你能澄清一下吗?
-
@Richard:线程(在 Windows 上)是一个实际的对象——内核知道的东西。您可以创建线程并对它们执行其他操作(挂起、恢复、发布窗口消息、等待它们退出)。有关详细信息,请参阅 Windows 内部。
标签: .net process applicationdomain