1

可能重复:
如何在不同的 CPU 内核上生成线程?

我正在使用 C#。我想使用线程概念编写程序。我只想知道如何在不同的处理器中运行线程。在这里我附上我的部分代码:

Thread t1 = new Thread(threadJobA);
Thread t2 = new Thread(threadJobB);
t1.Start();
t2.Start();
4

3 回答 3

5

就像我在评论中所说的那样,简短的回答是:“别担心。” 如果你不得不问这个问题,那绝对不值得你付出任何努力。

也就是说,真正做到这一点的方法是设置“线程关联掩码”,它控制允许线程在哪个逻辑处理器上运行。我不确定你甚至可以用 CLR 线程来做到这一点(它可能会爆炸,世界将会结束。)但如果你有一个普通的 ol' 线程,使用 创建CreateThread,那么你可以使用设置关联掩码SetThreadAffinityMask

但真的。不要这样做。

于 2012-10-11T05:27:15.087 回答
0

为什么要接听处理器的电话?这背后的理性是什么?

它纯粹由操作系统负责将作业/任务委托给处理器。这是为了管理所有正在运行的进程/任务的执行时间。如果你有一个四核处理器,仍然没有必要总是给所有处理器相同的负载。操作系统正在管理 PCB 以在正在运行的进程之间共享可用资源。

TPL 可以很好地并行执行您的代码,明智地应用 TPL 将提高性能。

于 2012-10-11T05:56:09.687 回答
-1

您可以简单地使用任务并行库,这将在将线程委派给 CPU 核心方面做得很好。

当您想在不同的处理器中运行线程时,您会遇到跨越“AppDomain”边界的问题。

于 2012-10-11T05:07:47.547 回答