在多个线程上划分工作量

时间:2009-01-16 07:30:20

标签: c# multithreading multicore

我想知道是否有人知道一篇描述将工作量划分为多个线程的好文章?它最好是为C#编写的,但它确实是我追求的概念,所以如果它是用不同的,类似的语言编写的,那不是问题。

我有一个问题,我必须将大量计算分成几个线程然后在一次迭代完成后对生成的数据求和(所以我需要知道所有线程都已完成),然后开始一个新的迭代,为所有线程提供上一次迭代中生成的数据(数据将在每次迭代结束前修改)。

我希望这是有道理的,而且是可能的。无论哪种方式,我都会欣赏一些关于如何解决计算大量数据的问题的建议,这些数据分为几个线程(因此我可以使用多个处理器的核心)。

感谢您的回答!

4 个答案:

答案 0 :(得分:6)

您应该查看Parallel FX(PFX),您可以找到博客here和下载链接here(感谢Marc)。

不幸的是,我不知道是否会发布.NET 2.0 / 3.5,因为它目前是针对.NET 4.0的。

如果您正在考虑自己实施,请查看Work Stealing Algorithms

来自Power Threading的Jeffrey Richter还有一个名为Wintellect的图书馆,它有一些相当不错的课程。

答案 1 :(得分:4)

Lasse和Marc已经谈到了Parallel Extensions。我有一些关于使用和基准测试的博客文章(包含代码):

这些可能有助于展示可以分解工作的各种不同方式。

答案 2 :(得分:3)

“Parallel Extensions”就是为此而设计的,特别是Parallel类(它允许您非常轻松地在线程之间进行分割)。结果的汇总比较棘手;一些快速搜索显示了一些mixed results - 但我不知道最终版本中会有什么(即它可能更容易)。

CTP是available here,或者等待.NET 4.0。

答案 3 :(得分:0)

Paint.NET做得非常好(用于图像处理),旧版本的源代码仍然可以在某处自由使用。

有关详细信息,请转到我关于a white paper by the author我曾经看过这个主题的问题。当我想最近向同事展示这篇文章的时候,我(也就是:谷歌)再也找不到这个了,所以问题就这样了。