0

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

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

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

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

  • “公寓/免费线程”和“STA/MTA”是否意味着不同的东西?Rogerson 的书 (1997) 是否不再反映 COM 的线程模型?
  • 为什么名称变了?
4

1 回答 1

0

似乎这些术语可以互换:

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 没有调用用户界面线程,而是使用术语单元线程。使用术语自由线程而不是工作线程。[...]

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

于 2021-07-09T16:52:38.030 回答