我有一个模拟引擎,我想首先并行化,然后在C#中开发为Web服务。这是一个密集的模拟,需要大量的CPU和RAM,我想将每个运行拆分在一个单独的线程上。为了让您更好地了解模拟可以运行100次运行,并且每次运行都会收集一些结果。从每次运行中收集结果然后将它们整理成一个大文件将是直截了当的。因此,如果我有一个具有4个内核的多核机器,例如,想法是在每个核心上运行4次运行,然后再运行4次......等等。我已经在较新版本的.net中阅读了有关Parallel Extensions的一些内容。我可以在3.5中实现相同的目标,还是更好地转向4.0?如果我将其作为Web服务,还有什么需要注意的吗?任何进一步的想法或建议都非常受欢迎。
答案 0 :(得分:1)
最好转移到4.0并使用TPL。这样你就可以创建一个任务<>运行每个模拟并让TPL调度程序在资源可用时对其进行适当的调度。运行完成后,您可以将结果放入ConcurrentCollection<>一旦一切都完成了对它们进行整理(你甚至可以让其他任务整理,而其他任务正在运行,如果这对你来说很重要。
在3.5中,大部分的调度工作将留给您,并且API不能用于创建任务。你也没有任何可能使结果整理更简单的并发集合(永远不会低估编写正确和高效的并发集合的复杂性。)
如果您将其设为Web服务,则必须了解服务的使用情况以及这将如何影响Web服务。基本上,您可以改善单个请求延迟,但这可能会以降低总体吞吐量为代价。有关此问题的讨论,请参阅以下链接。
http://blogs.msdn.com/b/pfxteam/archive/2010/02/08/9960003.aspx