理想的任务数量

时间:2014-01-02 12:16:17

标签: c# parallel-processing task-parallel-library

我目前正在开发一个具有“令人尴尬的并行”场景的应用程序。是否有任何指南/算法来确定理想的任务数量以最大化CPU利用率。

3 个答案:

答案 0 :(得分:3)

如果您可以维护多个线程数等于核心数(或者如果启用了超线程,则为两倍),应以最佳方式使用CPU。

此外,相关帖子可能会有所帮助:Optimal number of threads per core

答案 1 :(得分:3)

我认为最好的方法是首先让框架处理这个问题,并且只有在不够好的情况下才能做更复杂的事情。

在您的情况下,这可能意味着使用Parallel.ForEach()来处理某些集合,而不是手动使用 n Task

如果您发现Parallel.ForEach()默认设置并未以您希望的方式并行化工作,那么您可以通过设置MaxDegreeOfParallelism或使用自定义分区程序来尝试摆弄它。 / p>

只有当它仍然不够好时,你应该考虑使用Task s。

答案 2 :(得分:1)

这取决于你的任务。如果您只是处理并且不等待I / O,那么您应该拥有尽可能多的内核。

向许多不同的服务器发送查询,等待20到40毫秒的响应,从某个磁盘驱动器或磁带录音机读取一些I / O,然后只处理一个ms,每个核心可以服务30个或更多线程。