在这种情况下,有多少线程是最佳的

时间:2014-09-12 15:20:07

标签: c# multithreading

如果我有N个内核和cpu绑定工作要做(没有IO,没有阻塞调用)我可以分成任意数量的无关块,那么有多少线程最适合这个?会不会是N?

2 个答案:

答案 0 :(得分:2)

这将是N

用于工作的最佳线程数通常是可用于执行工作的核心数。这会在每个核心上放置一个线程,没有交换,也没有空闲核心。

根据具体的应用和要求,此规则始终有例外。但从一开始就是一个很好的经验法则。

答案 1 :(得分:0)

理想线程数等于硬件线程数,等于内核数,或者如果启用了超线程,则内核数乘以2。

但是,当你说“可以将工作分成任意数量的无关块”时要小心。也许这是一系列要处理的项目,或类似的东西?如果每个项目的处理时间是不变的,那么您可以静态地分割工作并将其分配给不同的线程。但是,如果不同的项目可能需要相当多的不同执行时间来处理,则此策略可能不是最佳的。实际上,很可能一个线程需要 - 例如 - 一分钟来处理1000个项目,而另一个线程需要一个小时来处理1000个不同的项目。

最简单的方法是让框架为您处理。使用Parralel.For(或类似的方法)可能比手动创建线程更好。