我有软件(带有非常大的循环)必须按特定顺序运行,所以我不能使用多线程,我尝试使用 parallel.for,但它产生了很多问题,因为它不能按正确的顺序运行。我正在考虑的唯一解决方案是在 2 个或 4 个 cpu 内核上使用我的 1 个线程。是否可以使用 c# 在超过 1 个 cpu 内核上运行 1 个线程?
3 回答
简短的回答。不
每个线程都有自己的 CPU/核心来处理。如果你想在 2+ CPUs/cores 上工作,你需要 2+ 线程。一个线程可以切换核心,如果它处于等待状态,然后在另一个核心上恢复,但不能同时在两个核心上运行......
如果您向我们展示您正在努力实现的目标,我们可能会为您提供帮助,但到目前为止,我无法告诉您更多信息。
使用串联执行的多个内核没有任何好处。
但是,如果您只需要维护结果的顺序,请查看ParallelEnumerable.AsOrdered
.
例子:
var yourResults = yourList.AsParallel().AsOrdered().Select(DoProcessSingle);
DoProcessSingle
可以按任何顺序调用,但它返回的结果将与您连续执行的顺序相同,即:
var yourResults = yourList.Select(DoProcessSingle);
这真的取决于你的情况。
在并行编程中,他们称之为“并行”或类似的东西。
如果您的以下过程真的取决于您之前的结果,您不能这样做。
但也许你可以把它分解成几块。
很抱歉错过理解您的问题。
对于线程与核心。我会说,一个核心可以有很多线程。
这真的取决于你的工作类型,
如果您的工作很容易计算
但需要等待其他一些事情,您可以在一个核心中执行多个线程而不会出现问题。例如
1,轻松处理数据,2,发送数据到另一个服务器 3,等待并获取服务器响应。4、工艺简单
如果您的工作是繁重的计算并且可能只在您的机器上工作,甚至只在 CPU 上工作。
那么这可能不是更多线程的理想选择。
但是您可以进行测试以找出答案。
同样,如前所述,如果您的数据/作业确实取决于先前的结果,则不能并行执行。