multithreading - STA/MTA 与公寓/空闲线程与 UI 线程/工作线程是什么?为什么改名?
问题描述
我正在阅读Dale Rogerson 的Inside COM,它使用术语单元线程和自由线程来描述不同类型的 COM 线程。
他还澄清了这些直接对应于UI 线程和工作线程:
COM 使用相同的两种类型的线程,尽管 COM 对它们有不同的名称。COM 没有调用用户界面线程,而是使用术语单元线程。使用术语自由线程而不是工作线程。[...]
但是,许多其他文档都提到了STA和MTA。“单线程公寓”和“多线程公寓”。
- “公寓/免费线程”和“STA/MTA”是否意味着不同的东西?Rogerson 的书 (1997) 是否不再反映 COM 的线程模型?
- 为什么名称变了?
解决方案
似乎这些术语可以互换:
COM 同步调用 | COM 不同步调用 |
---|---|
STA(首选名称) | MTA(首选名称) |
《公寓线》 | 免费线程 |
(经常)UI线程 | (经常)工作线程 |
OLE 线程模型的描述和工作方式指示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 没有调用用户界面线程,而是使用术语单元线程。使用术语自由线程而不是工作线程。[...]
不过,我很想知道为什么术语会发生变化。
推荐阅读
- selenium - 如何在基于测试参数运行的 Selenium 中并行运行文件中的每个测试标签的日志
- c# - 将 WSDL 的类对象传递给显示空值的 Web 服务
- c# - 从form1单击按钮时从form2调用按钮
- wagtail - 如何在主页上添加联系表格
- python - 比较字典,更新不覆盖值
- java - Jboss 自动调用 DB Oracle 的 PL 程序
- javascript - 如何使用 Google Script 为大型数据集生成距离矩阵?
- wordpress - 域更改:使用 htaccess 重定向 301 不起作用
- node.js - VSCode节点js调试器卡在结构化堆栈文件中
- javascript - 如何使用 v-select 列表显示 vuetify 数据表的隐藏列?