2015-02-10 62 views
0

我有软件(非常大的循环),必须以一定的顺序运行,所以我不能使用多线程,我试图与parallel.for一起工作,并且由于它不以正确的顺序工作,所以造成了很多问题。我唯一想到的解决方案是在2或4个cpu内核上使用我的1个线程。有可能运行1线程在多个1 cpu核心与C#?使用我的1线程2或4个CPU核心C#没有parallel.for?

+2

您可以让线程在内核间反弹,但不能让它一次在多个内核上运行。你试图做的事听起来不可能。 – 2015-02-10 13:09:15

+0

“必须以特定顺序运行”有关您为什么不能按顺序执行的更多详细信息。 – weston 2015-02-10 14:55:36

回答

6

简答题。 NO

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

如果您向我们展示了您究竟想达到什么,我们可能会帮助您,但截至目前没有什么我可以告诉你的了。

-1

这真的取决于你的情况。

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

如果您的以下进程完全取决于你之前的结果, 你不能做到这一点。

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

对不起理解你的问题。

对于线程vs核心。我会说,一个核心可能会有很多线索。

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

如果你的工作是很容易计算
但需要等待一些其他的事情 你可以在一个核心做多线程没有问题。 例如
1,轻松处理数据, 2,将数据发送到另一台服务器 3,等待获取服务器响应。 4,易加工

,如果你的工作是繁重的计算,可能唯一的工作你的机器上,甚至只在CPU。

那么这可能不是一个很好的理想更多的线程。

但你可以做测试找出。

同样,作为一个提到的,如果你的数据/工作真的取决于前面的结果,你不能这样做并行。

0

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

不过,如果你只需要保持结果的排序,然后再看ParallelEnumerable.AsOrdered

例子:

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

DoProcessSingle可以称为以任何顺序,但它返回的结果会以相同的顺序,如果你在系列做了,即:

var yourResults = yourList.Select(DoProcessSingle); 
相关问题