.NET线程模型

时间:2018-11-19 02:46:02

标签: .net multithreading

当我们通过ThreadPoolTask.RunThread对象在.NET中创建线程时,该线程是映射到单个Windows线程还是可以映射到多个线程?换句话说,.Net CLR的Threading Model是什么? 有人可以在这里阐明一下吗?

PS :有人问过here关于JVM的类似问题,但我找不到.NET的类似问题。

1 个答案:

答案 0 :(得分:2)

默认情况下,每个托管线程都映射到单个OS线程。但是,通过使用CLR托管API,您可以将托管线程迁移到其他本机OS线程。

来自MSDN

  

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

但是,您可以通过调用Thread.BeginThreadAffinity来要求CLR不要将托管线程移动到另一个OS线程。

这意味着.NET线程模型为N:M。