逻辑线程与物理线程

本文关键字:线程 | 更新日期: 2023-09-27 18:31:52

我正在阅读有关System.Threading.DispatcherObject类型的链接 http://msdn.microsoft.com/en-us/library/ms750441.aspx

本文提到了逻辑线程和物理线程之间的一对一关系。以下是文章的片段:

在 WPF 的设计阶段,目标是移动到单个 执行线程,但是一个非线程"关联"模型。线 当组件使用执行的标识时,会发生关联性 线程来存储某种类型的状态。最常见的形式是 使用线程本地存储 (TLS) 来存储状态。线程亲和力 要求每个执行逻辑线程仅由一个拥有 操作系统中的物理线程,可以成为内存 密集

有人可以解释一下逻辑线程与物理线程之间的区别吗?

逻辑线程与物理线程

本地线程是运行时中的线程。该螺纹比成熟的物理螺纹更轻,适用于重量较轻的工艺。物理线程是处理器上下文切换到和处理的线程。它有更多的元数据与之关联,因为操作系统会跟踪它。涉及更多细节,但这是一个快速概述。

在这种情况下,物理线程将在内部包含这些逻辑"虚拟线程"。

.NET

2.0 的 CLR 确实计划将光纤支持作为 SQL CLR 的 .NET Thread 提供。它从未进入产品,但可能在遥远的未来,CLR 将支持它。因此,这个大的红色线程亲和力警告。

操作系统本身确实支持光纤,但它们很难正确使用,因为您在用户模式下切换堆栈,让其他代码在同一物理线程上运行。这确实消除了在某些高性能方案中可能有意义的昂贵上下文切换。使用纤程作为抽象并不是一个好主意,因为您不能调用任何第三方库,因为您不知道 api 是否确实具有线程亲和性。

当今多核机器中上下文切换的成本远低于几代 Windows 版本和处理器。我怀疑您在现实世界的应用中是否会从纤维中获得很多好处。除此之外,芯片制造商正在努力降低上下文切换的成本。有一些设计可以使其像一个CPU周期一样便宜。

长话短说:

如果您自己托管 CLR 并使用 CLR 托管 API 的(尚)不存在的功能,则可能会发生 CLR 线程对象不是物理操作系统线程的情况。

据我所知,即使在Windows 8中,窗口消息泵系统也会保留在那里,其中每个窗口都与创建线程具有线程关联,该线程还必须泵送窗口消息。