C# 线程是内核对象吗?

C# 线程是内核对象吗?,c#,.net,clr,C#,.net,Clr,在这本书中,我读到Thread类的每个实例实际上都在分配一个内核对象——这是使用Thread的开销之一 据我所知,线程不是内核对象(在本例中,只有进程是内核对象。进程包含的线程不是内核对象?) 有人能解释一下吗?关于线程的实例: 操作系统线程ID与托管线程没有固定关系,因为非托管主机可以控制托管线程和非托管线程之间的关系。具体来说,复杂的主机可以使用CLR宿主API针对同一操作系统线程调度多个托管线程,或者在不同的操作系统线程之间移动托管线程 NET中还有其他类型的线程或类似线程的东西。线程池中

在这本书中,我读到
Thread
类的每个实例实际上都在分配一个内核对象——这是使用
Thread
的开销之一

据我所知,线程不是内核对象(在本例中,只有进程是内核对象。进程包含的线程不是内核对象?)

有人能解释一下吗?

关于线程的实例:

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

NET中还有其他类型的线程或类似线程的东西。线程池中有线程,也有任务。两者都没有直接绑定到操作系统线程


总之,我对这一点的理解是,.NET线程不一定包含内核对象。

线程首先是托管对象,您知道System.Threading.Thread类。它是一个内部CLR对象,一个C++类也叫做线程。有相当多的管道与之相关,冰山式的。这条管道当然使用内核对象,其中有五个。你能从中看到的东西。其中一个是本机操作系统线程句柄,另外四个有点神秘,但可能是同步对象句柄

在.NET2.0中,线程与实际Windows线程对象的解耦是非常臭名昭著的。这只有在技术上是可能的,没有一个广为人知的人真正实现了使它工作的CLR主机。对SQLServer团队来说,用光纤实现线程是一个重要的项目,他们放弃了这个项目。不能使它足够可靠。从那以后我就没试过