4

我知道我不应该依赖托管线程和非托管线程之间存在一对一的映射。从MSDN

操作系统 ThreadId 与托管线程没有固定关系,因为非托管主机可以控制托管线程和非托管线程之间的关系。具体来说,复杂的主机可以使用 Fiber API 针对同一个操作系统线程调度许多托管线程,或者在不同操作系统线程之间移动托管线程。

但在现实生活中,这样的 CLR 主机是否存在?(如果是这样,它们是什么?)我刚刚回答了一个相关的问题,我想知道我的建议对于那个特定情况有多糟糕。

4

1 回答 1

5

一种可能是 Microsoft SQL Server(从 2005 版开始)。IIRC 甚至根据他们的要求在 CLR 2.0 中内置了特定的托管支持(有关更多背景信息,另请参阅此博客文章),因此他们在使用纤程(也称为用户模式调度)而不是 SQL Server 中的线程时也可以支持 CLR。

然而,这似乎从来没有真正奏效过(来源):

轻量级池不支持公共语言运行时 (CLR) 执行。禁用以下两个选项之一:“启用 clr”或“轻量级池”。

我认为假设没有(生产就绪)主机不将 CLR 线程映射到主机线程 1:1 是相当安全的。

SO周围有几个问答似乎表明相同。

例如,

于 2013-08-26T04:59:06.873 回答