线程亲和性和进程关联性之间有什么区别?

时间:2010-03-24 11:50:46

标签: .net multithreading

线程关联性和进程关联性之间有什么区别?

如果我有两个线程并且我有一个双核心机器,那么是否可以在两个核心上并行运行这两个线程?

如果我使用处理器关联掩码,那么我可以控制核心上进程的执行,但是当我必须在特定核心上运行线程时,我如何才能使这些线程具有核心特定性?

一个非常简单的例子将不胜感激。

2 个答案:

答案 0 :(得分:4)

  

Thread Affinity和Process affinity之间有什么区别?

进程关联是属于该进程的所有线程的默认关联掩码。如果没有另外指定,新线程将从进程关联掩码开始。但是,可以在不改变进程关联性(以及其他线程的关联掩码)的情况下更改单个线程的亲和性,并且当进程和线程绑定之间存在差异时就是这样。

  

如果我有两个线程并且我有双核心机器,那么是否可以在两个核心上并行运行这两个线程?

是的,这是可能的,但在大多数情况下,你真的应该让操作系统决定......最有可能它比你聪明。

  

如果我使用处理器关联掩码,那么我可以控制核心上进程的执行,但是当我必须在特定核心上运行线程时,我如何才能使这些线程具有核心特定性?

您必须使用p / invoke来调用非托管函数SetThreadAffinityMask(),然后使用Thread.BeginThreadAffinity()来确保托管线程与特定的OS线程保持一致。 但你真的不想这样做!

答案 1 :(得分:0)

我不知道您可以在.net中设置线程关联,因此环境决定在哪个核心上运行哪些线程。

相关问题