首页 > 解决方案 > STA/MTA 与公寓/空闲线程与 UI 线程/工作线程是什么?为什么改名?

问题描述

我正在阅读Dale Rogerson 的Inside COM,它使用术语单元线程自由线程来描述不同类型的 COM 线程。

他还澄清了这些直接对应于UI 线程工作线程

COM 使用相同的两种类型的线程,尽管 COM 对它们有不同的名称。COM 没有调用用户界面线程,而是使用术语单元线程。使用术语自由线程而不是工作线程。[...]

但是,许多其他文档都提到了STAMTA。“单线程公寓”和“多线程公寓”。

标签: multithreadingcomstamta

解决方案


似乎这些术语可以互换:

COM 同步调用 COM 不同步调用
STA(首选名称) MTA(首选名称)
《公寓线》 免费线程
(经常)UI线程 (经常)工作线程

OLE 线程模型的描述和工作方式指示STA == apartment threadMTA == free thread(即使两个新术语都使用“公寓”一词):

  1. 单线程单元模型 (STA):进程中的一个或多个线程使用 COM,并且对 COM 对象的调用由 COM 同步。接口在线程之间编组。单线程单元模型的退化情况,即给定进程中只有一个线程使用 COM,称为单线程模型。以前有时将 STA 模型简称为“公寓模型”。

  2. 多线程单元模型 (MTA):一个或多个线程使用 COM,并且对与 MTA 关联的 COM 对象的调用由与 MTA 关联的所有线程直接进行,而无需在调用者和对象之间插入任何系统代码。因为多个同时的客户端可能或多或少地同时调用对象(同时在多处理器系统上),所以对象必须自己同步它们的内部状态。接口不在线程之间封送。以前有时将这种模型称为“自由线程模型”。

如上所述apartment thread == UI threadfree thread == worker thread根据罗杰森的说法:

COM 使用相同的两种类型的线程,尽管 COM 对它们有不同的名称。COM 没有调用用户界面线程,而是使用术语单元线程。使用术语自由线程而不是工作线程。[...]

不过,我很想知道为什么术语会发生变化。


推荐阅读