我想知道System.Threading.Thread
在CLR中是如何运作的。我猜CLR中的线程是“轻量级的”,这意味着它们被多对一映射到内核线程......但是谁调度这些线程?当我创建一个线程时,它是否总是创建一个相应的“内核”线程,除非线程数大于物理内核的数量?它是否尝试在可用内核上安排这些线程?非常感谢任何信息/来源。
答案 0 :(得分:3)
您可以查看SSCLI。它是C ++ 2.0 ROTOR项目中公开可用的CLR 2.0源代码。这是揭示真相的唯一地方:)
UPD:在评论中有线索,如果有人有兴趣,可以在ROTOR中找到实际的东西;)
答案 1 :(得分:2)
MSDN:
操作系统ThreadId与托管线程没有固定的关系,因为非托管主机可以控制托管和非托管线程之间的关系。具体而言,复杂的主机可以使用Fiber API针对同一操作系统线程调度许多托管线程,或者在不同的操作系统线程之间移动托管线程。
答案 2 :(得分:0)
没有“最终答案/文件”......
在这种情况下,你通常需要求助于检查来源(如果有的话) - 或者使用像Reflector这样的东西来到源头......这可能是压倒性的数量,但肯定会给你你想要的答案......