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

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

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

但是,在现实生活中,是否存在此类CLR主机? (如果是,它们是什么?)我刚刚回答了一个相关问题,我想知道我对that particular case的建议实际上有多糟糕.

解决方法:

一种可能是Microsoft SQL Server(从2005版开始). IIRC甚至根据他们的请求将特定的托管支持内置到CLR 2.0中(有关更多背景信息,请参见this blog post),以便他们在使用光纤(也称为用户模式调度)而不是SQL Server中的线程时也可以支持CLR.

但是,这似乎从来没有真正起作用过(source):

Common language runtime (CLR) execution is not supported under
lightweight pooling. Disable one of two options: “clr enabled” or
“lightweight pooling.

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

关于SO的几个Q& A似乎暗示了相同的含义.

例如,

> Is Thread is kernel object ?
> How do I force the CLR to exhibit OS thread switching?

上一篇:一个类继承自另一个类比不使用继承的类更大的内存吗?


下一篇:在freenom注册免费域名