什么是 STA/MTA 与公寓/免费线程与 UI 线程/工作线程?为什么更名?

问题描述

我正在阅读 Dale Rogerson 的 Inside COM,它使用术语公寓线程空闲线程来描述不同类型的 COM 线程。 >

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

COM 使用相同的两种类型的线程,尽管 COM 对它们有不同的名称。 COM 使用术语公寓线程,而不是将其称为用户界面线程。使用术语空闲线程代替工作线程。 [...]

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

  • “公寓/免费线程”和“STA/MTA”的含义不同吗? Rogerson 的书 (1997) 是否不再反映 COM 的线程模型?
  • 为什么命名发生了变化?

解决方法

这些术语似乎可以互换:

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

Descriptions and workings of OLE threading models 表示 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 使用术语公寓线程,而不是将其称为用户界面线程。使用术语空闲线程代替工作线程。 [...]

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