【问题标题】:.NET threading model.NET 线程模型
【发布时间】:2019-04-21 09:36:27
【问题描述】:

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

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

【问题讨论】:

    标签: .net multithreading


    【解决方案1】:

    默认情况下,每个托管线程都映射到单个操作系统线程。但是,通过使用 CLR 托管 API,您可以将托管线程迁移到不同的本机操作系统线程。

    来自MSDN

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

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

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

    【讨论】:

    • 所以它的意思是 N:M 模型。
    • 没错。我已编辑我的答案以包含此内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2020-10-05
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 2011-01-06
    相关资源
    最近更新 更多