我正在使用parallel.for设置:
Parallel.For(0, 4, new ParallelOptions { MaxDegreeOfParallelism = 4 }, j =>我期望它创建4个工作线程,但是并发可视化工具只显示使用了3个工作线程。我已经尝试使用最大的并行度和处理器亲和度,但是在每个场景下只使用3个工作线程,而不是4个。干杯
发布于 2013-11-10 01:32:03
正如它所说的MaxDegreeOfParallelism,所以它不会超过这个值,但它也不会使用超过必要的值。
这是它在MSDN上说的
默认情况下,
和ForEach将使用底层调度器提供的线程数,因此将MaxDegreeOfParallelism从缺省值更改只会限制将使用的并发任务数。`
发布于 2013-11-10 01:55:37
这是设计出来的,我不记得我是在哪里读到它的,但它使用了底层的线程池,并且它只是在有处理器能力的情况下接受任务。虽然C#和F#之间的区别听起来很奇怪。
从理论上讲,它还应该取决于可用的处理器核心。如果只有一个核心,那么就不需要启动一个以上的线程。
如果你想强制它使用4,你可以编写你自己的调度器。
发布于 2013-11-10 02:27:04
如上所述,您只能指定最大线程数,而不能指定实际线程数。如果您有四个可用核心,并且工作负载不是微不足道的,那么所有四个都将并行运行,因为启动For的线程也用于执行工作项。
此外,Parallel.For可能会将您的输入范围分成块。它可能不会为四个项目,但如果你关心,你可以使用Parallel.Invoke()一次安排四个项目。
https://stackoverflow.com/questions/19879843
复制相似问题