0

我有软件(带有非常大的循环)必须按特定顺序运行,所以我不能使用多线程,我尝试使用 parallel.for,但它产生了很多问题,因为它不能按正确的顺序运行。我正在考虑的唯一解决方案是在 2 个或 4 个 cpu 内核上使用我的 1 个线程。是否可以使用 c# 在超过 1 个 cpu 内核上运行 1 个线程?

4

3 回答 3

6

简短的回答。

每个线程都有自己的 CPU/核心来处理。如果你想在 2+ CPUs/cores 上工作,你需要 2+ 线程。一个线程可以切换核心,如果它处于等待状态,然后在另一个核心上恢复,但不能同时在两个核心上运行......

如果您向我们展示您正在努力实现的目标,我们可能会为您提供帮助,但到目前为止,我无法告诉您更多信息。

于 2015-02-10T13:09:23.923 回答
0

使用串联执行的多个内核没有任何好处。

但是,如果您只需要维护结果的顺序,请查看ParallelEnumerable.AsOrdered.

例子:

var yourResults = yourList.AsParallel().AsOrdered().Select(DoProcessSingle);

DoProcessSingle可以按任何顺序调用,但它返回的结果将与您连续执行的顺序相同,即:

var yourResults = yourList.Select(DoProcessSingle);
于 2015-02-10T14:59:06.240 回答
-1

这真的取决于你的情况。

在并行编程中,他们称之为“并行”或类似的东西。

如果您的以下过程真的取决于您之前的结果,您不能这样做。

但也许你可以把它分解成几块。

很抱歉错过理解您的问题。

对于线程与核心。我会说,一个核心可以有很多线程。

这真的取决于你的工作类型,

如果您的工作很容易计算
但需要等待其他一些事情,您可以在一个核心中执行多个线程而不会出现问题。例如
1,轻松处理数据,2,发送数据到另一个服务器 3,等待并获取服务器响应。4、工艺简单

如果您的工作是繁重的计算并且可能只在您的机器上工作,甚至只在 CPU 上工作。

那么这可能不是更多线程的理想选择。

但是您可以进行测试以找出答案。

同样,如前所述,如果您的数据/作业确实取决于先前的结果,则不能并行执行。

于 2015-02-10T13:17:15.600 回答