可能重复:
如何在不同的 CPU 内核上生成线程?
我正在使用 C#。我想使用线程概念编写程序。我只想知道如何在不同的处理器中运行线程。在这里我附上我的部分代码:
Thread t1 = new Thread(threadJobA);
Thread t2 = new Thread(threadJobB);
t1.Start();
t2.Start();
可能重复:
如何在不同的 CPU 内核上生成线程?
我正在使用 C#。我想使用线程概念编写程序。我只想知道如何在不同的处理器中运行线程。在这里我附上我的部分代码:
Thread t1 = new Thread(threadJobA);
Thread t2 = new Thread(threadJobB);
t1.Start();
t2.Start();
就像我在评论中所说的那样,简短的回答是:“别担心。” 如果你不得不问这个问题,那绝对不值得你付出任何努力。
也就是说,真正做到这一点的方法是设置“线程关联掩码”,它控制允许线程在哪个逻辑处理器上运行。我不确定你甚至可以用 CLR 线程来做到这一点(它可能会爆炸,世界将会结束。)但如果你有一个普通的 ol' 线程,使用 创建CreateThread
,那么你可以使用设置关联掩码SetThreadAffinityMask
。
但真的。不要这样做。
为什么要接听处理器的电话?这背后的理性是什么?
它纯粹由操作系统负责将作业/任务委托给处理器。这是为了管理所有正在运行的进程/任务的执行时间。如果你有一个四核处理器,仍然没有必要总是给所有处理器相同的负载。操作系统正在管理 PCB 以在正在运行的进程之间共享可用资源。
TPL 可以很好地并行执行您的代码,明智地应用 TPL 将提高性能。
您可以简单地使用任务并行库,这将在将线程委派给 CPU 核心方面做得很好。
当您想在不同的处理器中运行线程时,您会遇到跨越“AppDomain”边界的问题。