线程亲和性和进程亲和性有什么区别?

12

线程亲和力与进程亲和力有什么区别?

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

如果我使用处理器亲和掩码,则可以控制进程在核上的执行,但是如何使线程特定于某个核心呢?

请提供一个非常简单的示例。

2个回答

4
什么是线程亲和性和进程亲和性的区别?
进程亲和性是所有属于该进程的线程的默认亲和度掩码。如果未另行指定,新线程将以进程亲和度掩码启动。但是,单个线程的亲和力可以在不改变进程亲和力(和其他线程的亲和度掩码)的情况下进行更改,这就是进程和线程亲和力之间的区别。
如果我有两个线程,我有一个双核机器,那么这两个线程是否可以并行在两个核上运行?
是的,这是可能的,但在大多数情况下,您应该让操作系统来决定...很可能它比你聪明。
如果我使用处理器亲和掩码,那么我可以控制进程在核心上的执行,但是当我必须在特定核心上运行线程时,如何使这些线程与核心相关?
您将不得不使用p/invoke调用未管理的函数SetThreadAffinityMask(),然后使用Thread.BeginThreadAffinity()确保托管线程与特定的OS线程保持一致。但是,你真的不想这样做!

我已经尝试使用SetThreadAffinityMask(),请查看我的问题@http://stackoverflow.com/questions/2498501/using-setthreadaffinitymask-function-imported-from-kernel32-dll-in-c-code - DotNetBeginner

0

我不知道在 .net 中是否可以设置线程亲和性,因此环境决定哪些线程在哪个核心上运行。


@Brian Rasmussen - 那又怎么样?我坚持我的说法,即没有办法从.NET强制将特定线程执行到特定处理器上。请参阅此线程以获取详细信息:http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/3279302a-6786-44a7-b69d-c302699b6fcb - Axarydax
抱歉,我当时误解了你的意思。 - Brian Rasmussen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接