哪些现有的 CLR 主机不提供托管线程和非托管线程之间的一对一映射?

nos*_*tio 4 .net c# clr winapi multithreading

我知道我应该依赖于有托管和非托管线程之间的一个一对一的映射。从MSDN

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

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

Chr*_*n.K 5

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

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

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

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

有几个围绕 SO 的问答似乎暗示了相同的内容。

例如,

  • 我也想不出来。甚至 [Singularity OS](http://research.microsoft.com/pubs/52716/tr-2005-135.pdf) 似乎也有 1:1 映射。虽然我认为未来假设的沙盒操作系统可能会偏离这一点。允许在 CLR 中进行非本地线程映射可能是一个好主意,即使它还没有被充分利用。 (2认同)