我在 StackOverflow 中查看了为线程实现 Core Affinity 的信息,
在 .NET 中。
一些答案说 .NET 不支持它自己的(托管)线程,
并且仅支持在操作系统上运行的非托管线程。
另一方面,其他答案中提到了以下属性:
- ProcessThread.IdealProcessor
link
- ProcessThread.ProcessorAffinity
link
可以看出,这两个属性不是 Thread
类的属性,而是 ProcessThread
类的属性。
所以我想问一下:
如果有人正在创建 .NET 应用程序,
并希望为其应用程序的线程设置核心关联,
在 .NET 托管线程上这样做是否安全且受支持?
(如果是,那么我想知道为什么这 2 个属性会暴露在 ProcessThread
类中
而不是在 Thread
类上?)
PS:我使用 .NET Framework v3.5 和 v2.0,
而不是较新版本的框架。
最佳答案
不。
.NET 线程不会 1:1 映射到操作系统线程。线程亲缘关系用于操作系统线程。由于运行时可以随意在 OS 线程之间切换 .NET 线程,因此设置处理器关联充其量无济于事,并在典型的多线程场景中浪费性能。
请注意,ProcessThread
仅包含有关在进程中运行操作系统线程的信息。当您询问进程具有哪些线程时,这就是您所得到的 - 它是操作系统的一部分,而不是 .NET。相比之下, Thread
是关于你的线程,而且只有被管理的线程。
关于c# - 我们可以在 .NET 中安全地执行核心关联吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50700915/