问题描述
我正在阅读 Dale Rogerson 的 Inside COM,它使用术语公寓线程和空闲线程来描述不同类型的 COM 线程。 >
他还澄清说,这些直接对应于UI 线程 和工作线程:
COM 使用相同的两种类型的线程,尽管 COM 对它们有不同的名称。 COM 使用术语公寓线程,而不是将其称为用户界面线程。使用术语空闲线程代替工作线程。 [...]
但是,许多其他文档都提到了STA 和MTA。 “单线程单元”和“多线程单元”。
- “公寓/免费线程”和“STA/MTA”的含义不同吗? Rogerson 的书 (1997) 是否不再反映 COM 的线程模型?
- 为什么命名发生了变化?
解决方法
这些术语似乎可以互换:
COM 同步调用 | COM 不同步调用 |
---|---|
STA(首选名称) | MTA(首选名称) |
“公寓线程” | 免费线程 |
(通常)UI 线程 | (通常)工作线程 |
Descriptions and workings of OLE threading models 表示 STA == apartment thread
和 MTA == free thread
(即使这两个新术语都使用“公寓”一词):
-
单线程单元模型 (STA):进程中的一个或多个线程使用 COM,对 COM 对象的调用由 COM 同步。接口在线程之间编组。单线程单元模型的一种退化情况,即给定进程中只有一个线程使用 COM,称为单线程模型。 以前有时将 STA 模型简称为“公寓模型”。
-
多线程单元模型 (MTA):一个或多个线程使用 COM,对与 MTA 关联的 COM 对象的调用由与 MTA 关联的所有线程直接进行,无需任何干预调用者和对象之间的系统代码。因为多个并发客户端可能或多或少地同时调用对象(在多处理器系统上同时),对象必须自己同步它们的内部状态。接口不在线程之间编组。 以前有时将此模型称为“自由线程模型”。
根据罗杰森的说法,正如上面引用的 apartment thread == UI thread
和 free thread == worker thread
:
COM 使用相同的两种类型的线程,尽管 COM 对它们有不同的名称。 COM 使用术语公寓线程,而不是将其称为用户界面线程。使用术语空闲线程代替工作线程。 [...]
不过,我很想知道为什么术语会发生变化。