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

标签 c# .net multithreading winapi 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 的几个问答似乎暗示了同样的问题。

例如,

关于c# - 哪些现有的 CLR 主机不提供托管和非托管线程之间的一对一映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436409/

相关文章:

.net - 如何从 axd 转换为 ashx?

.net - 刷新服务引用更新 app.config

c# - 使用 TextBox 动态过滤名称的 DataGrid

c# - 我担心我添加了太多接口(interface)

c# - Linq Distinct 仅在下一行匹配

c - 程序如何处理带有多个线程和信号的中断?

java - 同步保护不适用于双线程

c# - 在 WPF 中执行异步任务的推荐方法是什么?

c# - 使用 Serilog for .NET 将日志写入 Excel 文件

c# - CancellationTokenSource,什么时候处理?