Is Thread是内核对象

本文关键字:对象 内核 Thread Is | 更新日期: 2023-09-27 18:24:54

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

据我所知,线程不是内核对象(在这种情况下,只有进程是内核对象。进程包含的线程不是内核目标?)

有人能解释一下吗?

Is Thread是内核对象

Thread首先是托管对象,您知道System.Threading.Thread类。接下来,它是一个内部CLR对象,也是一个名为Thread的C++类。它涉及到大量的管道,冰山式的。这个管道当然使用了内核对象,其中有五个。你可以在Taskmgr.exe中看到一些东西。其中一个是本机操作系统线程句柄,其他四个有点神秘,但可能是同步对象句柄。

在.NET 2.0中,线程与实际Windows线程对象的解耦是非常臭名昭著的。这只是技术上的可能,没有人真正实现过使其工作的CLR主机。对SQL Server团队来说,用光纤实现Thread是一个重要的项目,但他们放弃了。无法使其足够可靠。据我所知,从那以后就再也没有人尝试过。

来自MSDN关于Thread:实例

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

.NET中还有其他类型的线程或类似线程的东西。有来自ThreadPool的线程,也有Tasks。两者都不是AFAIK直接绑定到操作系统线程。

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