nos*_*tio 4 .net c# clr winapi multithreading
我知道我应该不依赖于有托管和非托管线程之间的一个一对一的映射。从MSDN:
操作系统 ThreadId 与托管线程没有固定的关系,因为非托管主机可以控制托管线程和非托管线程之间的关系。具体来说,一个复杂的主机可以使用 Fiber API 来针对同一个操作系统线程调度多个托管线程,或者在不同的操作系统线程之间移动一个托管线程。
但在现实生活中,这样的 CLR 主机存在吗?(如果是这样,它们是什么?)我刚刚回答了一个相关的问题,我想知道我的建议对于那个特定案例有多么糟糕。
一个可能是 Microsoft SQL Server(从 2005 版开始)。IIRC 甚至根据他们的要求将特定的托管支持内置到 CLR 2.0 中(有关更多背景信息,另请参阅此博客文章),以便他们在使用纤程(也称为用户模式调度)而不是 SQL Server 中的线程时也可以支持 CLR。
然而,这似乎从未真正奏效(来源):
轻量级池不支持公共语言运行时 (CLR) 执行。禁用以下两个选项之一:“启用 clr”或“轻量级池化”。
我认为假设那里没有(生产就绪)主机是相当安全的,它们不会将 CLR 线程映射到主机线程 1:1。
有几个围绕 SO 的问答似乎暗示了相同的内容。
例如,