在.NET BCL中,有一个CurrentThread和一个ProcessThread对象。这些有什么区别?
谢谢
这是设计 .NET 2.0 时 SQL Server 项目的遗留问题。 他们向 CLR 团队施加巨大的压力,要求其打破 .NET Thread 类和操作系统线程之间的链接。 他们当时有理由认为,SQL Server 支持以纤程方式实现的“轻量级”线程。 Fiber 是“协同例程”的 Windows 实现,又名“绿色线程”,大约 15 年前很流行。 该项目失败了,他们无法使其足够可靠。 多核革命同时发生,使协同例程的实用性变得过时。 遗憾的是,我们无法找到将线程映射到 ProcessThread 的简单方法。 真是亏大了。 也许有一天,有人会利用这种解耦的优势,但我还没有看到它完成。
您现在唯一可用的映射是在线程本身内部 P/Invoke GetCurrentThreadId()。 这会返回一个 TID,您可以将其与 ProcessThread.Id 相匹配。
CurrentThread
System.Threading.Thread
静态属性是当前 CLR
System.Threading.Thread
实例。 CLR 线程是对底层 win32 线程的抽象。 System.Diagnostics.ProcessThread
类提供对 win32 线程的访问,主要用于性能跟踪。CLR 线程的一个关键区别是它们不固定为 win32 线程。