c# - 我们可以在 .NET 中安全地执行核心关联吗?

标签 c# .net multithreading affinity cpu-cores

我在 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/

相关文章:

multithreading - 如何使用 TableServiceContext.BeginSaveChanges 创建 Silverlight 单元测试?

c# - 根据多个条件过滤 CollectionView

c# - 在c#中将不同的列表绑定(bind)到datagridview中的列

c# - EmitCalli .net 核心替代方案

c# - 优雅地终止由 QueueUserWorkItem() 分派(dispatch)的线程池任务

java - java中同时启动2个线程

c# - ASP.NET 的 Wordpress 等价物

ssize_t 的 C# 模拟类型

c# - 将字典传递给 Controller

C#.NET : Change elements in a CSS file from dynamically generated HTML?