这是一个开放式问题。我应该考虑哪些方法?
5 回答
您的第一步是找到并理解问题中的并行性。编写性能并不比它所取代的单线程代码更好的多线程代码真的很容易。“并行编程模式” (亚马逊)是对关键概念的精彩介绍。
一旦您有了可行的设计,就开始阅读 MSDN 杂志档案(链接)中“并发”主题中的文章,尤其是 Jeff Richter 所写的任何文章。这些将为您提供特定于 Windows 和 .NET 的线程结构的具体细节。(Richter 的“CLR via C# (Amazon)中的多线程部分很短,但很有见地——强烈推荐。)
.NET 的一些并行扩展目前正在测试中,可在 Microsoft 的Parallel Computing Developer Center获得。他们有一些你会期待的有趣的项目,比如 Parallel foreach 和称为 PLINQ 的 LINQ 并行版本。有关扩展的一些最佳信息位于第 9 频道。
我认为,如果这些是要考虑的最佳选择之一,我们还可以包括非.NET 特定的并行处理方法。
@Larsenal
如果您想在 .NET 之外进行分支,那么已经有很多关于英特尔线程构建块的讨论,它是 C++ 的并行库。
有很多选择,最佳解决方案将取决于您要解决的问题的性质。如果您试图解决一个令人尴尬的并行问题,那么划分和并行化任务将是微不足道的。在这种情况下,挑战将来自于分配和管理所使用的数据。
一些建议是:
- 具有 .Net 和其他常用语言绑定的ICE Grid
- Velocity是 Microsoft 版本的 Oracle (Tangersol) Coherence
- Microsoft Compute Cluster Server即将推出的 HPC 产品
- 数据突触网格服务器